Замена сертификата в зеркале
В предыдущей статье я привел инструкцию для настройки зеркала для MS SQL в недоменной среде.Но я там указал срок действия сертификата на год, т.е. через год надо было бы его заменить, а чтоб не проморгать этот момент, надо было бы прикрутить мониторинг и все такое. Поэтому решили этот вопрос проще, установкой сразу нового серта с большим сроком действия. В плане безопасности это конечно не очень, ну и ладно, пускай прорываются через все фаерволы и дмз, перехватывают серт трафика синхронизации и расшифровывают его :)
Итак:
Смотрим название сертификата, используемого для зеркала
SELECT e.name [endpoint_name], c.name [cert_name], c.start_date, c.expiry_date
FROM sys.database_mirroring_endpoints e
INNER JOIN sys.certificates c
ON e.certificate_id=c.certificate_id
Смотрим логины с сертификатами, которые используются для зеркала
SELECT
sp.name AS [login_name],
e.name AS [endpoint_name],
c.name AS [cert_name],
c.start_date,
c.expiry_date
FROM
sys.server_permissions AS prmssn
INNER JOIN sys.endpoints AS e
ON e.endpoint_id = prmssn.major_id
and prmssn.class = 105
INNER JOIN sys.server_principals AS sp
ON sp.principal_id = prmssn.grantee_principal_id
INNER JOIN sys.database_principals AS dp
ON sp.sid=dp.sid
INNER JOIN sys.certificates c
ON dp.principal_id=c.principal_id
WHERE e.type=4
Теперь, зная все данные, можно приступать к манипуляциям
*1. Создаем сертификат для точки подключения на принципале
USE master;
CREATE CERTIFICATE [сервер1_mirroring_cert]
WITH SUBJECT = 'сервер1_mirroring_cert',
EXPIRY_DATE='01/01/2025'; -- ставим на столько лет, сколько нам надо
GO
*2. Сразу же делаем бэкап, копируем на партнера и на витнес
BACKUP CERTIFICATE [сервер1_mirroring_cert] TO FILE = 'путь_до_сертификата_сервер1_new.cer';
GO
*3. Заменяем сертификат
ALTER ENDPOINT Endpoint_Mirroring
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE [сервер1_mirroring_cert]);
GO
*4. Ну и удаляем старый сертификат
DROP CERTIFICATE старый_сертификат;
GO
*5. Переходим на партнера, удаляем серт, который использовался для логина с принципала
DROP CERTIFICATE сервер1;
GO
*6. Создаем новый сертификат, используя сертификат с принципала
CREATE CERTIFICATE [сервер1_mirroring_cert] AUTHORIZATION сервер1_user
FROM FILE = 'путь_до_сертификата_сервер1_new.cer';
GO
*7. Создаем новый сертфикат для точки подключения на партнере
USE master;
CREATE CERTIFICATE [сервер2_mirroring_cert]
WITH SUBJECT = 'сервер2_mirroring_cert',
EXPIRY_DATE='02/01/2025'; -- тоже ставим достаточное количество лет
GO
*8. Делаем бэкап сертификата, копируем его на принципала и на витнес
BACKUP CERTIFICATE [сервер2_mirroring_cert] TO FILE = 'путь_до_сертификата_сервер2_new.cer';
GO
*9. Указываем точке подключения использовать новый сертификат
ALTER ENDPOINT Endpoint_Mirroring
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE [CAUISDB2_mirroring_cert]);
GO
*10. Удаляем старый сертификат
DROP CERTIFICATE сервер2
GO
*11. Создаем сертифика, испольуя предыдущий бэкап
CREATE CERTIFICATE [сервер2_mirroring_cert] AUTHORIZATION сервер2_user
FROM FILE = 'путь_до_сертификата_сервер2_new.cer'
GO
*12. Переходим на витнес
USE master;
CREATE CERTIFICATE [витнес_mirroring_cert]
WITH SUBJECT = 'витнес_mirroring_cert',
EXPIRY_DATE='03/01/2025'; --опять лета и годы :)
GO
*13. Делаем бэкапа и копируем по остальным серверам
BACKUP CERTIFICATE [витнес_mirroring_cert] TO FILE = 'путь_до_сертификата_витнес_new.cer';
GO
*14. Заменяем серт
ALTER ENDPOINT Endpoint_Mirroring
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE [витнес_mirroring_cert])
GO
*15. Удаляем старый серт
DROP CERTIFICATE витнес
GO
*16. Идем на приципал, делаем серт
CREATE CERTIFICATE [витнес_mirroring_cert] AUTHORIZATION витнес_user
FROM FILE = 'путь_до_сертификата_витнес_new.cer'
GO
*17. Удаляем старый серт
DROP CERTIFICATE CAUISMTS
GO
*18. Идем на зеркало и делаем ту же самую операцию
CREATE CERTIFICATE [витнес_mirroring_cert] AUTHORIZATION витнес_user
FROM FILE = 'путь_до_сертификата_витнес_new.cer'
GO
DROP CERTIFICATE витнес
GO
*19. Идем на витнес и опять делаем все тоже самое
CREATE CERTIFICATE [сервер2_mirroring_cert] AUTHORIZATION сервер_user
FROM FILE = 'путь_до_сертификата_сервер2_new.cer'
GO
CREATE CERTIFICATE [сервер1_mirroring_cert] AUTHORIZATION сервер1_user
FROM FILE = 'путь_до_сертификата_сервер1_new.cer'
GO
DROP CERTIFICATE сервер1
DROP CERTIFICATE сервер2
GO
Ну вот на этом все.