我正在为我们的SQL Server开发人员创建一个TEST环境。
在生产中,我们有3个SQL Server,SQL01
其中包含多个镜像到的数据库SQL02
。 SQL03
在“具有自动故障转移功能的高安全性”或同步配置中充当见证人。
我已经使用VMWare P2V将所有三台计算机虚拟化到单独的硬件上,重新配置了计算机的SID,并从这些新计算机中清除了生产服务器的IP地址。
我起初忘记给生产见证机器加黑洞,因此TEST机器上的数据库仍将SQL03
机器用作见证。注意到这个问题,我决定在TEST上重新配置数据库,以指向新虚拟化的TEST见证者,称之为TEST03
。
要重新配置数据库以使用新的见证服务器,我在主服务器上输入了以下命令TEST01
:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
响应是意外的:
The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was
not changed. Verify that the server is connected, and try again.
我对这个错误消息非常困惑,因为该配置在生产机器上确实有效,并且在测试机器上没有进行任何修改。
为了使它起作用,我需要LOGIN
在测试见证人上创建一个:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];
并且GRANT
它CONNECT
有问题的端点的权利:
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];
然后,我能够成功地将TEST环境上的镜像数据库指向新的测试见证人。
我如何检查生产见证端点,以了解与之关联的安全性?
我假设必须要检查一些系统目录,但是联机丛书似乎没有特定于端点的任何东西,并且Bing很好,Bingless ...
附加信息:
SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name
FROM sys.server_permissions p
INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';
返回:
endpoint_id class_desc permission_name endpoint_name principal_name
2 ENDPOINT CONNECT TSQL Local Machine public
3 ENDPOINT CONNECT TSQL Named Pipes public
4 ENDPOINT CONNECT TSQL Default TCP public
5 ENDPOINT CONNECT TSQL Default VIA public
和:
SELECT name, endpoint_id, protocol_desc, type_desc, role_desc
FROM sys.database_mirroring_endpoints;
返回值:
name endpoint_id protocol_desc type_desc role_desc
Mirroring 65536 TCP DATABASE_MIRRORING WITNESS
sys.server_permissions
镜像端点对象似乎没有任何输入。否major_id
,没有minor_id
匹配项65536。而且,所有系统数据库都不包含对端点的任何引用。
我很茫然。