问题描述
在使用sqlserver管理工具时,有时候会出现选定的用户拥有对象,无法除去该用户的情况,这时需要寻找解决方法。
查看问题
在解决问题之前,需要先查看问题的原因,可以尝试通过以下代码来查看所有拥有该用户的对象:
SELECT *
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('yourUser')
运行上述代码后,可以看到该用户所拥有的所有对象。接下来就需要针对这些对象进行排查。
查找被拒绝的权限
如果用户无法被删除,可能是因为该用户在一些对象上被赋予了不可撤销的权限,导致无法删除该用户。
可以使用以下代码来查找所有拒绝该用户的权限:
SELECT *
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('yourUser')
AND state_desc = 'DENY'
通过上述代码可以找到所有被拒绝的权限,然后可以通过REVOKE命令来删除这些权限,例如:
REVOKE DELETE ON dbo.yourTable TO yourUser
查找所拥有的角色
如果用户无法被删除,可能是因为该用户是一些角色的成员,需要将该用户从角色中移除才能删除。
可以使用以下代码来查找该用户所拥有的角色:
SELECT *
FROM sys.database_role_members
WHERE member_principal_id = USER_ID('yourUser')
通过上述代码可以找到该用户所拥有的所有角色,然后可以通过ALTER ROLE命令来移除该用户的角色,例如:
ALTER ROLE yourRole DROP MEMBER yourUser
结论
通过以上两种方法,可以解决选定的用户拥有对象,无法除去该用户的问题。通过查找被拒绝的权限,可以删除用户在某些对象上的权限,从而使得该用户可以被删除;通过查找所拥有的角色,可以将该用户从角色中移除,从而使得该用户可以被删除。