因为配置了Always-On导致的无法Drop Login...
程序员文章站
2023-11-18 16:13:22
一个sysadmin离职了,但是因为之前是他配置的Always-on,所以试图Drop他的login就会失败,原因是这个login会赋予一个叫做“Hadr_endpoint”的endpoint权限,并且是这个endpoint的owner。 如果直接尝试revoke,会提示错误,无法revoke。 也 ......
一个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了!
其实还没实践。。。要等到下个维护窗口了,实践完之后再来更新。
上一篇: Shell脚本数组操作小结