因為配置了Always-On導致的無法Drop Login...
阿新 • • 發佈:2019-08-22
一個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了!
其實還沒實踐。。。要等到下個維護視窗了,實踐完之後再來更