sqlserver 因为选定的用户拥有对象,所以无法除去该用户的解决方法

问题描述

在使用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

结论

通过以上两种方法,可以解决选定的用户拥有对象,无法除去该用户的问题。通过查找被拒绝的权限,可以删除用户在某些对象上的权限,从而使得该用户可以被删除;通过查找所拥有的角色,可以将该用户从角色中移除,从而使得该用户可以被删除。

数据库标签