2016-11-04 92 views
0

我只有一個大型的查找數據表。我想鎖表,所以不允許插入(密碼保護?)。用戶將在兩個字段中查找數據以在第三個字段中查找結果。通常,用戶將擁有對數據庫中所有其他表的讀寫權限。保護表格免於插入,但仍然可供讀取

+0

您無法對錶進行密碼保護。您可以使用而不是觸發器來防止插入。你也可以爲某些(或者全部)用戶插入DENY。 https://msdn.microsoft.com/en-us/library/ms173724.aspx –

+1

更好的是,不要讓'GRANT'人員擁有你不想讓他們擁有的權限。默認情況下,沒有人可以對數據庫執行任何操作。如果您擔心用戶可能會對特定表格進行更改,那麼只有當您已經超越授予他們許可權限的時候纔會這樣做。所以停下來問問你自己爲什麼給了他們這些權限。 –

回答

0

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

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

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

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

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

USE [master] 

GO 

ALTER DATABASE [name] ADD FILEGROUP [READONLYTABLES] 

GO 

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

GO 

USE Name 

GO 

DROP TABLE mytable 

CREATE TABLE mytable (

    somedata char(8000) not null 

) ON READONLYTABLES 

GO 
0

我發現這個網頁,其中解釋了幾個解決方案:

https://www.mssqltips.com/sqlservertip/2711/different-ways-to-make-a-table-read-only-in-a-sql-server-database/

以下可能是你之後(將表添加到FILEGROUP,然後將該組設置爲READONLY):

USE [master] 
GO 

ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS] 
GO 

ALTER DATABASE [MyDB] 
ADD FILE (NAME = N'mydb_readonly_tables', 
FILENAME = N'C:\JSPACE\myDBReadOnly.ndf' , SIZE = 2048KB , 
FILEGROWTH = 1024KB) TO FILEGROUP [READ_ONLY_TBLS] 
GO 

DROP table tblEvents 

create table tblEvents 
(
id int, 
logEvent varchar(1000) 
) 
ON [READ_ONLY_TBLS] 

ALTER DATABASE [MyDB] MODIFY FILEGROUP [READ_ONLY_TBLS] READONLY