我正在尝试从用户删除桌面上的所有以下权限:
选择,更新,删除,插入,执行,引用,查看定义
我试过了:
REVOKE select,update,delete,insert,execute,references,view definition on schema::DBO to [user]
和此:
REVOKE select,update,delete,insert,execute,references,view definition to [user]
我并没有真正理解这种差异。我假设第一个仅适用于dbo模式中的对象,后者引用所有模式中的对象。
无论如何,如果我在SSMS中选择表并查看属性,选择“权限”,然后在顶部网格中选择用户,我会看到用户对该表的权限。 SELECT和VIEW DEFINITION行每个在底部网格中出现两次,一次使用GRANTOR为“DBO”而一次没有。
不幸的是,在我运行上述两个语句之后,用户仍然拥有GRANTOR行为dbo的权限。以下REVOKE语句将清除这些剩余权利:
REVOKE VIEW DEFINITION ON [dbo].[TableNAME] TO [USER] AS [dbo]
REVOKE SELECT ON [dbo].[TableNAME] TO [USER] AS [dbo]
但我也想删除这些权利,而不必为他的所有表单独删除。
我认为可以删除所有用户对所有表的访问权限。我如何在一个声明中这样做?
我试图避免阅读元数据和动态sql,但我尝试了这个:
DECLARE @GRANTOR varchar(255)
DECLARE @GRANTEE varchar(255)
DECLARE @TABLE_CATALOG varchar(255)
DECLARE @TABLE_SCHEMA varchar(255)
DECLARE @TABLE_NAME varchar(255)
DECLARE @PRIVILEGE_TYPE varchar(255)
DECLARE @SQL varchar(255)
DECLARE MyCursor CURSOR FOR
SELECT
GRANTOR
,GRANTEE
,TABLE_CATALOG
,TABLE_SCHEMA
,TABLE_NAME
,PRIVILEGE_TYPE
FROM
INFORMATION_SCHEMA.TABLE_PRIVILEGES
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO
@GRANTOR
,@GRANTEE
,@TABLE_CATALOG
,@TABLE_SCHEMA
,@TABLE_NAME
,@PRIVILEGE_TYPE;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'REVOKE ' + @PRIVILEGE_TYPE + ' ON [' + @TABLE_SCHEMA + '].[' + @TABLE_NAME + '] TO [' + @GRANTEE + '] AS [' + @GRANTOR + ']';
PRINT (@SQL)
EXECUTE (@SQL)
FETCH NEXT FROM MyCursor INTO
@GRANTOR
, @GRANTEE
, @TABLE_CATALOG
, @TABLE_SCHEMA
, @TABLE_NAME
, @PRIVILEGE_TYPE;
END
CLOSE MyCursor
DEALLOCATE MyCursor
我运行它没有任何错误,它留下了许多SELECT和VIEW DEFINITION权限。看起来TABLE_PRIVILEGES的查询没有返回某些特权。
答案 0 :(得分:0)
这应该为你做的工作:
`deny SELECT, INSERT, DELETE, UPDATE on SCHEMA::SchemaName to user1,user2,user3
希望它能满足您的需求:)