2010-03-27 57 views
19

我正在更新該表中的一些記錄集,之後我需要使該表只讀。如何在SQL Server中創建只讀表?

那麼如何在SQL Server中創建表只讀?

+0

這裏有幾個很好的答案。我的問題是:誰的桌子必須是隻讀的?系統管理員總是有權做任何事情,儘管它可能需要時間和精力。 – 2010-03-27 19:59:18

+1

非系統管理員用戶 – Jeyavel 2010-03-29 09:32:44

回答

29

一個簡單的替代方案,將阻止更新和插入一個特定的表,但仍然允許刪除:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK(1 = 0) 

注意:這樣就避免了INSERT和UPDATE,但允許刪除操作。

如果你真的需要一個表來進行真正的只讀您也可以:

一)把它放在自己的數據庫或
二)把它放在只有讀文件組和標記,這裏的如何:

USE [master] 

GO 

ALTER DATABASE [csvtosp] ADD FILEGROUP [READONLYTABLES] 

GO 

ALTER DATABASE [csvtosp] ADD FILE (NAME = N'mydb_readonly_tables', FILENAME = N'G:\SQL2005DATA\mydb_readonly_tables.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB) TO FILEGROUP [READONLYTABLES] 

GO 

USE csvtosp 

GO 

DROP TABLE mytable 

CREATE TABLE mytable (

    somedata char(8000) not null 

) ON READONLYTABLES 

GO 

有關此主題的更多信息,請瀏覽:

How to make a table Read Only in SQL Server

+2

試圖改進此答案,但我的編輯被拒絕。請添加缺少的代碼,以便如何使文件組只讀:ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY' – Baodad 2015-07-13 18:40:56

+0

1.文件組「READONLYTABLES」不是READONLY 2.無需刪除表以將其移動到另一個文件組。你只需要重新創建聚集索引。 – 2017-08-04 11:07:28

2

如果您希望它只作爲一般公衆閱讀,但仍然希望能夠在稍後的日期編輯表,則可能需要考慮爲數據庫創建多個用戶併爲該數據庫授予不同的權限 - 理想情況下,您應該做這無論如何,不​​要讓廣大市民獲得改變表,截斷等

7
  1. 觸發與回滾反式
  2. 只讀文件組
  3. 不要授予插入/更新/刪除權限

3號可能是最佳做法。例如,如果您的連接是db_owner,則可以禁用觸發器或將表移動到不同的文件組。