Cyn*_*ker 1 sql-server delete users sql-server-2016
我正在对我们的开发数据库进行干净的备份,以便轻松地重新启动数据库。该数据库有大约 200 个测试用户,应该将其删除以使其真正干净,但问题是我无法删除其中任何一个。
当我运行如下命令时:
DROP USER [MyGarbageUser]
Run Code Online (Sandbox Code Playgroud)
它提示我以下错误:
消息 15284,级别 16,状态 1,第 5 行 数据库主体已授予或拒绝对数据库中的对象的权限,无法删除。
这些用户既不拥有该数据库中的任何对象(据我所知),也不应该拥有。在网上搜索了一大堆后,我仍然无法找到解决方案。
如何强制从该数据库中删除 MyGarbageUser?
您尝试删除的用户似乎扮演了授予者的角色,因此您需要在执行用户删除之前撤销这些访问权限。
尝试运行以下命令以首先获取受赠者的详细信息:
select
permission_name,
state_desc,
object_name(major_id) as securable,
user_name(grantor_principal_id) as grantor
from sys.database_permissions
where grantee_principal_id = user_id('User Name to be dropped')
Run Code Online (Sandbox Code Playgroud)
接下来将使用以下方法查找授予人的详细信息:
select *
from sys.database_permissions
where grantor_principal_id = user_id ('User Name to be dropped');
Run Code Online (Sandbox Code Playgroud)
根据您从上述查询中获得的结果,您需要执行以下操作之一:
REVOKE VIEW DEFINITION ON USER::User Name to be dropped TO public
REVOKE CONTROL ON USER::User Name to be dropped TO public
REVOKE ALTER ON USER::User Name to be dropped TO public
REVOKE ALTER ON USER::User Name to be dropped TO *grantee*
REVOKE CONTROL ON USER::User Name to be dropped TO *grantee*
REVOKE VIEW DEFINITION ON USER::User Name to be dropped TO *grantee*
Run Code Online (Sandbox Code Playgroud)
这只是一种可能性,可能有一些其他类型的访问已被授予。因此,您需要检查相同内容并相应地执行撤销。
您可以从以下论坛中找到更多这些示例:
以上希望有所帮助。
归档时间: |
|
查看次数: |
1642 次 |
最近记录: |