Я нахожусь в процессе создания среды TEST для наших сотрудников по разработке SQL Server.
В производственном процессе у нас есть 3 SQL-сервера, которые 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 на нового свидетеля-тестера.
Как я могу проверить конечную точку свидетеля производства, чтобы увидеть, с чем связана безопасность?
Я предполагаю, что должен быть какой-то системный каталог, который я могу проверить, однако в Books-on-Line, похоже, нет ничего конкретного для конечных точек, и 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. Кроме того, ни одна из системных баз данных не содержит ссылок на конечную точку.
Я в растерянности.