Jestem w trakcie tworzenia środowiska TEST dla naszych programistów SQL Server.
W produkcji mamy 3 serwery SQL, SQL01
zawiera kilka baz danych, które są dublowane SQL02
. SQL03
działa jako świadek w „wysokim bezpieczeństwie z automatycznym przełączaniem awaryjnym” lub konfiguracją synchroniczną.
Użyłem VMWare P2V do wirtualizacji wszystkich trzech maszyn na osobny sprzęt, ponownie skonfigurowałem identyfikatory SID tych maszyn i zaczarowałem adresy IP naszych serwerów produkcyjnych z tych nowych maszyn.
Początkowo zapomniałem zakopać czarną maszynę świadka produkcji, więc bazy danych na maszynach TEST nadal używały SQL03
maszyny jako świadka. Zauważywszy problem, postanowiłem zmienić konfigurację baz danych w TEST, aby wskazać nowo zwirtualizowanego świadka TEST, nazwij go TEST03
.
Aby ponownie skonfigurować bazę danych, aby używała nowego świadka, wprowadziłem następującą komendę na serwerze podstawowym TEST01
:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Odpowiedź była nieoczekiwana:
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.
Byłem bardzo zakłopotany tym komunikatem o błędzie, ponieważ konfiguracja działa na maszynach produkcyjnych i nie została w żaden sposób zmodyfikowana na maszynach testowych.
Aby to zadziałało, musiałem utworzyć LOGIN
świadka testowego:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];
i GRANT
ma CONNECT
prawo do danego punktu końcowego:
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];
Byłem wtedy w stanie z powodzeniem skierować lustrzane bazy danych w środowisku TEST na nowego świadka testowego.
Jak mogę sprawdzić punkt końcowy świadka produkcyjnego, aby zobaczyć, jakie zabezpieczenia są z tym związane?
Zakładam, że musi istnieć jakiś katalog systemu, który mogę sprawdzić, jednak Books-on-Line nie wydaje się mieć nic konkretnego dla punktów końcowych, a Bing ma się dobrze, Bingless ...
Dodatkowe informacje:
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';
zwroty:
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
I:
SELECT name, endpoint_id, protocol_desc, type_desc, role_desc
FROM sys.database_mirroring_endpoints;
Zwroty:
name endpoint_id protocol_desc type_desc role_desc
Mirroring 65536 TCP DATABASE_MIRRORING WITNESS
Wygląda na to, że nie ma wpisu sys.server_permissions
dla lustrzanego obiektu punktu końcowego. Nie major_id
i nie minor_id
pasuje do 65536. Ponadto żadna z systemowych baz danych nie zawiera odniesienia do punktu końcowego.
Jestem zagubiony.