保护表不受插入影响,但仍可供读取

时间:2016-11-04 14:43:53

标签: sql-server azure access

我只有一个大的查找数据表。我想锁定表,所以不允许插入(密码保护?)。用户将在两个字段中查找数据以在第三个字段中查找结果。通常,用户将具有对DB中所有其他表的读写权限。

2 个答案:

答案 0 :(得分:0)

一种简单的替代方法,可阻止更新并插入特定表但仍允许删除:

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

请注意:这可以避免INSERT和UPDATE,但允许使用DELETE。

如果你真的需要一个真正只读的表,你也可以:

a)将其放入自己的数据库或  b)将它放在文件组上并标记为只读,这是如何:

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

答案 1 :(得分: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