首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于授予的权限,无法删除server_principal

由于授予的权限,无法删除server_principal
EN

Database Administration用户
提问于 2021-06-01 15:12:59
回答 2查看 388关注 0票数 1

我想从我的服务器中删除一个服务器主体,因为成员已经不在我们公司工作了。不幸的是,这个主体是对象的所有者/权限的授予者,因为他配置了可用性组,等等。

我找到了这个页面,它描述了一种通过sa 链接消除所有权限/再次授予它们的方法,到目前为止效果很好。不幸的是,校长批准了一项我在任何地方都找不到的许可。

我使用的查询获得了这个主体授予的权限:

代码语言:javascript
复制
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上新授予的权限时,它对应于相同的:

我发现什么东西了吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2021-07-28 07:40:23

我和微软支持小组一起解决了这个问题。当我们删除被授权服务器主体时(不是设保人,而是被授予权利的人)。

在删除授权服务器主体之后,授予的权利就消失了。之后,我可以删除设保人服务器主体。添加已删除的主体返回,并分配相同的权利,并完成!

票数 0
EN

Database Administration用户

发布于 2021-07-28 09:13:03

很高兴听到你能够在微软的支持下解决这个问题。您还可以运行下面的查询,通过运行以下命令来检查设保人:

代码语言:javascript
复制
select *                     
from sys.database_permissions                     
where grantor_principal_id = user_id ('User Name to be dropped');   

根据从上述命令获得的结果,您将需要按照以下命令执行该命令:

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/292609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档