sql-server - 如何撤销角色在sql server中拥有的所有权限?

标签 sql-server

我有一个角色,它在各种表上有一些选择权限。我想删除该角色在所有表中拥有的所有选择权限。例如,

revoke all from my_role_name;

但这似乎不起作用。我怎样才能做到这一点?

最佳答案

我只是需要这样做。

您可以使用以下内容

DECLARE @RevokeScript NVARCHAR(MAX);
DECLARE @PrincipalName SYSNAME = 'my_role_name'

SELECT @RevokeScript = STRING_AGG(CAST('REVOKE ' + permission_name
                                       + CASE class_desc
                                           WHEN 'OBJECT_OR_COLUMN' THEN ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(major_id)) + '.' + QUOTENAME(OBJECT_NAME(major_id))
                                           WHEN 'SCHEMA' THEN ' ON  SCHEMA::' + SCHEMA_NAME(major_id)
                                           WHEN 'DATABASE' THEN ''
                                         END
                                       + ' TO ' + QUOTENAME(@PrincipalName) COLLATE SQL_Latin1_General_CP1_CI_AS AS NVARCHAR(MAX)), ';')
FROM   sys.database_permissions AS pe
WHERE  pe.grantee_principal_id = DATABASE_PRINCIPAL_ID (@PrincipalName);

PRINT @RevokeScript

EXEC (@RevokeScript) 

关于sql-server - 如何撤销角色在sql server中拥有的所有权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128769/

相关文章:

sql - 如何将事务隔离级别设置为用户的默认未提交读

SQL Server - SQL 级联更改列的数据类型

sql - t-sql BETWEEN 子句

mysql - 使用 SQL 查询的数据复制解决方案

sql - 从 SQL Server 检索任何外部表数据时,Postgresql 外部数据包装器引发错误

c# - 在 .net/sql 服务器中处理 bc 日期的最佳方法是什么?

sql - INSERT INTO SELECT * FROM,同时将数据类型转换为外键

sql-server - 是否可以在 MS SQL 的一个语句中更改多个列?

sql-server - SQL Server 2008执行计划中的 "Missing Index Impact %"是什么意思?

c# - 获取表的列名并将它们存储在字符串或 var c# asp.net 中