1

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

我们应该怎么做?

4

2 回答 2

2

这是一种使用动态 SQL 的方法。由于 Management Studio 中的输出限制,打印可能不会向您显示整个命令。您需要更新用户名和异常。

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;
于 2012-08-06T13:04:59.217 回答
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
于 2016-03-10T03:03:02.123 回答