使用 Grant 和 Revoke 时遇到问题

Posted

技术标签:

【中文标题】使用 Grant 和 Revoke 时遇到问题【英文标题】:Trouble using Grant and Revoke 【发布时间】:2013-09-30 22:02:20 【问题描述】:

我只是想向我的数据库中的用户授予/拒绝安全对象。例如,这是我的撤销声明之一

使用我的数据库; 从 [用户名] 撤消 ALTER; 去吧

当我使用 SELECT FROM MyDB.sys.database_permissions 查看权限时,它说用户仍然拥有该权限。您实际上是如何撤消权限的?

【问题讨论】:

执行查询后,刷新用户列表。然后选择用户并转到属性。您所看到的可能只是 Management Studio “有用”的缓存内容 已经试过了,刷新数据库、用户和用户字段后仍然显示用户有权限。我什至在执行查询并刷新字段后重新启动了数据库,但用户仍然拥有权限 【参考方案1】:

如果用户拥有包含特定安全对象的更广泛权限,而您revoked 对该安全对象拥有更窄的权限,则用户仍将拥有范围更广的grantgranted 权限。

如果您想要一个范围广泛的授权例外,您可能需要考虑在安全对象上使用deny

编辑:

鉴于您的 SQL:

USE MY_DB; REVOKE ALTER FROM [UserName]; GO

...您需要指定要撤销的安全对象的ALTER 权限:ALTER ENDPOINTALTER LOGIN

请参阅here 了解 ALTER 权限的适用性,例如:

REVOKE ALTER LOGIN FROM [UserName]

【讨论】:

我试过了,但问题仍然存在。我可以使用 SQL Server Management Studio 轻松修改权限,但使用 T-SQL 无法使其正常工作。 我已经编辑了我的答案,其中包含您在问题中输入的 SQL 的一些细节。 您发布的示例给了我一个语法错误。我还手动从所有数据库成员和服务器成员中删除了用户。我还从所有拥有的模式中清除了他,并撤销了他所有的服务器安全权限。但是,当我尝试使用 T-SQL 撤销他的数据库安全权限时,仍然没有任何反应。奇怪的是我仍然可以使用管理工作室撤销他的数据库安全权限,但我不能通过 T-SQL。

以上是关于使用 Grant 和 Revoke 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql_DCL_grant/revoke

MySQL—赋权(grant)和回收权限(revoke)

oracle常见受权与回收权限 grant和revoke

oracle 授予权限和收回权限 grant和revoke 以及角色的创建 删除

MySQL用户认证及权限grant-revoke

Permissible Privileges for GRANT and REVOKE