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

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

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

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

正确方法如下:

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了!

 

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

 

本周维护窗口错过了,下个维护窗口更新。

你可能感兴趣的:(因为配置了Always-On导致的无法Drop Login...)