所以这个让我难住了。我们正在进行一些权限清理,并且希望从数据库角色中删除一些 AD 组。
我们跑ALTER ROLE MyRole DROP MEMBER [domain\group]
并得到Commands completed successfully.
。
但
该组仍然是该角色的成员。
有任何想法吗?运行命令的登录名是实例上的系统管理员。我们也尝试过旧的exec sp_droprolemember
,结果相同。
所以这个让我难住了。我们正在进行一些权限清理,并且希望从数据库角色中删除一些 AD 组。
我们跑ALTER ROLE MyRole DROP MEMBER [domain\group]
并得到Commands completed successfully.
。
但
该组仍然是该角色的成员。
有任何想法吗?运行命令的登录名是实例上的系统管理员。我们也尝试过旧的exec sp_droprolemember
,结果相同。
这是因为您
domain\user
是Windows 组成员,并且该 Windows 组是您要从中删除用户的角色的成员。我给你看一个例子:
我的域帐户
BL-DB-COLL2\dev4
是 Windows 组的成员BL-DB-COLL2\TestGroup
,并且BL-DB-COLL2\TestGroup
是db_datareader
固定服务器角色的成员,我可以通过查询看到这一点sys.database_role_members
,或者如果您单击您感兴趣的角色,您可以在角色下的对象资源管理器中看到它。您将看到 Windows 组作为成员,而不是单个 Windows 帐户。在我的示例中,Windows 组
BL-DB-COLL2\TestGroup
是以下成员的成员db_datareader
:现在如果我执行
ALTER ROLE db_datareader DROP MEMBER [BL-DB-COLL2\dev4]
我也有Commands completed successfully.
但我的用户仍然在那里要从数据库角色中删除用户,您可以从角色中删除整个Windows 组,或者从该 Windows 组中删除域帐户,我认为执行第一个操作不是一个好主意,在我的简单情况下,我刚刚执行了
deny select to [BL-DB-COLL2\dev4]
该用户不能再做任何事情SELECT
,即使它仍然是 db_datareader 的成员。完成此操作的正确方法是“管理”方式:您应该要求您的 HR 负责将此人转移到另一个有其他任务要做且属于其他 Windows 组的团队。一旦用户在 Windows 级别从该 Windows 组中删除,并放入另一个具有有限权限的 Windows 组中,该组应该已经完成了您的工作,否则您手动拒绝该角色对此拥有的所有权限
domain\user
。请注意,在这种情况下,其他人很难猜测“db_datareader 成员无法执行任何 SELECT”是如何可能的。