因为配置了Always-On导致的无法Drop Login...

百般思念 提交于 2019-11-28 05:41:32

一个sysadmin离职了,但是因为之前是他配置的Always-on,所以试图Drop他的login就会失败,原因是这个login会赋予一个叫做“Hadr_endpoint”的endpoint权限,并且是这个endpoint的owner。

如果直接尝试revoke,会提示错误,无法revoke。

也不要尝试什么修改login名字啊,更新master数据库啊这些。。。都是徒劳,更没必要卸载实例。

正确方法如下:

1.运行脚本,确认Endpoint的owner和授予的权限:

USE master; 
 
SELECT SUSER_NAME(principal_id) AS endpoint_owner ,name AS endpoint_name 
FROM sys.database_mirroring_endpoints; 
 

SELECT EPS.name, SPS.STATE, CONVERT(nvarchar(38), SUSER_NAME(SPS.grantor_principal_id))AS [GRANTED BY], SPS.TYPE AS PERMISSION, CONVERT(nvarchar(46),SUSER_NAME(SPS.grantee_principal_id))AS [GRANTED TO] 
FROM sys.server_permissions SPS , sys.endpoints EPS WHERE SPS.major_id = EPS.endpoint_id AND name = 'Hadr_endpoint'
ORDER BY Permission,[GRANTED BY], [GRANTED TO]; 

 

2.运行脚本,更改Endpint的owner,并赋予这个新的Owner和原来一样的权限:

BEGIN TRAN

USE master; 

ALTER AUTHORIZATION ON ENDPOINT::Hadr_endpoint TO sa;  

GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [SQL Login 1]; 
GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [SQL Login 2]; 

COMMIT 

 

3.可以Drop in原来的login了!

 

其实还没实践。。。要等到下个维护窗口了,实践完之后再来更新。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!