Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何拒绝用户对除一个表以外的所有表的写预许可_Sql Server - Fatal编程技术网

Sql server 如何拒绝用户对除一个表以外的所有表的写预许可

Sql server 如何拒绝用户对除一个表以外的所有表的写预许可,sql-server,Sql Server,我们有大约50个表,我们需要拒绝每个表的写入权限,除了特定用户的一个表 我们如何才能做到这一点?这里有一种使用动态SQL的方法。由于ManagementStudio中的输出限制,打印可能不会显示整个命令。您需要更新用户名和异常 DECLARE @sql NVARCHAR(MAX); SET @sql = N''; SELECT @sql = @sql + ' DENY UPDATE, DELETE, INSERT ON ' + QUOTENAME(SCHEMA_NAME([s

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


我们如何才能做到这一点?

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

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;

在SQL Server Management Studio中:

转到用户的属性页,然后转到用户映射选项卡

勾选public和db_datareader不勾选相应数据库的db_denydatawriter

这将只授予他们读取权限

然后,您可以使用类似于以下内容的查询为用户向表授予insert和update权限:

GRANT INSERT ON OBJECT::dbo.MyTable TO Fred
GRANT UPDATE ON OBJECT::dbo.MyTable TO Fred

到目前为止你试过什么?您是否尝试过完全按照您所描述的方式进行操作,拒绝写入49个表并授予1个?