我想从我的服务器中删除一个服务器主体,因为成员已经不在我们公司工作了。不幸的是,这个主体是对象的所有者/权限的授予者,因为他配置了可用性组,等等。
我找到了这个页面,它描述了一种通过sa 链接消除所有权限/再次授予它们的方法,到目前为止效果很好。不幸的是,校长批准了一项我在任何地方都找不到的许可。
我使用的查询获得了这个主体授予的权限:
USE [master]
GO
SELECT pm.class, pm.class_desc, pm.major_id, pm.minor_id, pm.grantee_principal_id,
pm.grantor_principal_id, pm.[type], pm.[permission_name], pm.[state],pm.state_desc,
pr.[name] AS [owner], gr.[name] AS grantee
FROM sys.server_permissions pm
JOIN sys.server_principals pr ON pm.grantor_principal_id = pr.principal_id
JOIN sys.server_principals gr ON pm.grantee_principal_id = gr.principal_id
WHERE pr.[name] = N'PRINCIPALNAMEHERE';这将产生以下结果:

但我不知道上面的major_id引用了什么地方。它不在sys.endpoints或sys.services中。此外,赋予此服务器所在的可用性组(只有on)的权限不引用相同的major_id。
我尝试过搜索'sql server major_id“65537‘和'sql server权限major_id’65537‘之类的东西,但是我一直无意中发现了不适用于我的情况的东西。
所以现在我在这里寻求帮助,希望能找到一个在这种情况下有更多经验的人,或者是一个拿着黄金罚单的人。
提前感谢!
编辑JR:看起来major_id指的是sys.availability_replicas DMV中的replica_metadata_id。当我查看与上面的查询输出截图相同的class_desc上新授予的权限时,它对应于相同的:

我发现什么东西了吗?
发布于 2021-07-28 07:40:23
我和微软支持小组一起解决了这个问题。当我们删除被授权服务器主体时(不是设保人,而是被授予权利的人)。
在删除授权服务器主体之后,授予的权利就消失了。之后,我可以删除设保人服务器主体。添加已删除的主体返回,并分配相同的权利,并完成!
发布于 2021-07-28 09:13:03
很高兴听到你能够在微软的支持下解决这个问题。您还可以运行下面的查询,通过运行以下命令来检查设保人:
select *
from sys.database_permissions
where grantor_principal_id = user_id ('User Name to be dropped'); 根据从上述命令获得的结果,您将需要按照以下命令执行该命令:
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* 上面的命令是可能的,可能还有其他类型的访问被授予。因此,您需要检查相同的内容并相应地执行revoke。
我在我的帖子中提到了这一点:
https://dbasdiary.com/mssql/force-deleting-user-from-database/
https://dba.stackexchange.com/questions/292609
复制相似问题