Dev*_*per 9 sql database sql-server sql-server-2008-r2
我试图使用以下命令将数据库设置为只读模式,它可以工作.
ALTER DATABASE [TESTDB] SET READ_ONLY WITH NO_WAIT
Run Code Online (Sandbox Code Playgroud)
但是,我需要只允许像UserSession等几个表可写.可能吗?
我们在数据库中有大约500个表,我们只需要允许4个表可写.
你可以否认INSERT,UPDATE,DELETE给public喜欢的角色:
DENY UPDATE ON tab1 TO public
DENY INSERT ON tab1 TO public
DENY DELETE ON tab1 TO public
Run Code Online (Sandbox Code Playgroud)
之后,常规用户(不是系统管理员)在尝试插入tab1时会出错:
INSERT INTO tab1 (id) VALUES (1)
--Msg 229, Level 14, State 5, Line 20
--The INSERT permission was denied on the object 'tab1', database 'test', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)
如果这是您愿意添加到数据库的东西,那么您可以生成脚本来更改所有表,如:
EXEC sp_msforeachtable '
PRINT ''
DENY UPDATE ON ? TO public
DENY INSERT ON ? TO public
DENY DELETE ON ? TO public
''
'
Run Code Online (Sandbox Code Playgroud)
确保您不会拒绝写入仍需要写入的4个表.
不确定您的应用程序,但如果您不想拒绝public角色权限,您可能会考虑创建自己的角色,拒绝访问该角色,并让用户成为该角色的一部分.
希望它有意义.