我们有大约50个表,我们需要拒绝每个表的写权限,除了特定用户的一个表。
我们怎么做?
答案 0 :(得分:3)
以下是使用动态SQL执行此操作的方法。由于Management Studio中的输出限制,Print可能不会显示整个命令。您需要更新用户名和例外。
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + '
DENY UPDATE, DELETE, INSERT ON ' +
QUOTENAME(SCHEMA_NAME([schema_id])) + '.'
+ QUOTENAME(name) + ' TO [username];' -- fix this username
FROM sys.tables
WHERE name <> 'exception'; -- fix this to be the one you want to allow
PRINT @sql;
-- EXEC sp_executesql @sql;
答案 1 :(得分:0)
在SQL Server Management Studio中:
转到用户的属性页面,然后转到“用户映射”选项卡。
勾选相应数据库的public和db_datareader(不要勾选db_denydatawriter)。
这只会授予他们读取权限。
然后,您可以使用类似于此的查询向表中授予用户插入和更新:
GRANT INSERT ON OBJECT::dbo.MyTable TO Fred
GRANT UPDATE ON OBJECT::dbo.MyTable TO Fred