一个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了!
其实还没实践。。。要等到下个维护窗口了,实践完之后再来更新。
本周维护窗口错过了,下个维护窗口更新。