我只有一个大的查找数据表。我想锁定表,所以不允许插入(密码保护?)。用户将在两个字段中查找数据以在第三个字段中查找结果。通常,用户将具有对DB中所有其他表的读写权限。
答案 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)
我找到了这个解释一些解决方案的页面:
以下内容可能就是您所追求的(将表格添加到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