1. 程式人生 > >因為配置了Always-On導致的無法Drop Login...

因為配置了Always-On導致的無法Drop Login...

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

 

其實還沒實踐。。。要等到下個維護視窗了,實踐完之後再來更