如何拒绝除一个表之外的所有表的用户写入权限

时间:2012-08-06 12:54:55

标签: sql-server

我们有大约50个表,我们需要拒绝每个表的写权限,除了特定用户的一个表。

我们怎么做?

2 个答案:

答案 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