Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2022 (16.x) и более поздних версий
Эта статья содержит шаги по настройке транзакционной и моментальной репликации с использованием проверки подлинности через идентификатор Microsoft Entra (ранее Azure Active Directory) для SQL Server с поддержкой Azure Arc.
Обзор
Поддержка проверки подлинности Microsoft Entra для репликации была введена в SQL Server 2022 (16.x) накопительном обновлении (CU) 6 и стала общедоступной в CU 12. При использовании проверки подлинности Microsoft Entra для репликации единственным отличающимся шагом является первый шаг. В частности, создайте имя входа Microsoft Entra и предоставьте разрешения sysadmin.
После этого используйте учетные данные Microsoft Entra в хранимых процедурах репликации, чтобы настроить репликацию транзакций или моментальных снимков, как обычно.
Примечание.
Начиная с SQL Server 2022 CU 6, отключите проверку подлинности Microsoft Entra для репликации, используя флаг трассировки сеанса 11561.
Предварительные условия
Чтобы настроить репликацию с проверкой подлинности Microsoft Entra, необходимо выполнить следующие предварительные требования:
- Включить SQL Server 2022 с помощью Azure-Arc , начиная с накопительного обновления 6.
- Настроена проверка подлинности Microsoft Entra для всех серверов в топологии репликации. Ознакомьтесь с руководством по настройке проверки подлинности Microsoft Entra для SQL Server с регистрацией приложения, чтобы узнать больше.
- Поддерживаемая версия SQL Server Management Studio (SSMS).
- Пользователь, подключающийся к издателю и подписчику, является членом фиксированной роли сервера sysadmin.
- Подключение должно быть зашифровано с помощью сертификата из доверенного центра сертификации (ЦС) или самозаверяющего сертификата.
- Если используется самозаверяющий сертификат, его необходимо импортировать на клиентский компьютер и установить в список доверенных сертификатов, чтобы клиент доверял SQL Server. Это требование нельзя обойти, выбрав параметр сертификата сервера доверия в SQL Server Management Studio (SSMS), так как он не работает с репликацией.
Ограничения
Настройка репликации с помощью проверки подлинности Microsoft Entra в настоящее время имеет следующие ограничения:
- В настоящее время можно настроить репликацию только с помощью Transact-SQL (T-SQL) и хранимых процедур репликации, а также мастера репликации в SSMS версии 19.1 или более поздней версии. В настоящее время невозможно настроить репликацию с помощью объектов репликации RMO или других языков командной строки.
- Каждый сервер в топологии репликации должен находиться по крайней мере на SQL Server 2022 CU 6. Предыдущие версии SQL Server не поддерживаются.
Создание логина SQL на основе идентификатора Microsoft Entra
Создайте учетную запись Microsoft Entra и предоставьте ей sysadmin роль.
Чтобы создать имя входа Microsoft Entra и назначить его как sysadmin, используйте следующую команду Transact-SQL (T-SQL):
USE master;
CREATE LOGIN [login_name]
FROM EXTERNAL PROVIDER;
EXECUTE sp_addsrvrolemember
@loginame = 'login_name',
@rolename = 'sysadmin';
Например, чтобы добавить имя newuser@tenant.comдля входа, используйте следующую команду:
USE master;
CREATE LOGIN [newuser@tenant.com]
FROM EXTERNAL PROVIDER;
EXECUTE sp_addsrvrolemember
@loginame = 'newuser@tenant.com',
@rolename = 'sysadmin';
Создание базы данных распространителя
Используйте sp_adddistributiondb для создания базы данных распространителя.
Ниже приведен пример скрипта для создания базы данных распространителя на распространитете:
EXECUTE sp_adddistributiondb
@database = N'distribution_db',
@data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA',
@log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA',
@log_file_size = 2,
@min_distretention = 0,
@max_distretention = 72,
@history_retention = 48,
@deletebatchsize_xact = 5000,
@deletebatchsize_cmd = 2000,
@security_mode = 1;
Следующий пример создает таблицу UIProperties в базе данных распространения и задает свойство SnapshotFolder, чтобы агент создания снимков знал, где записывать снимки репликации.
USE [distribution_db];
IF (NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = 'UIProperties' AND TYPE = 'U '))
CREATE TABLE UIProperties (id INT);
IF (EXISTS (
SELECT * FROM ::fn_listextendedproperty ('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', NULL, NULL))
)
EXECUTE sp_updateextendedproperty N'SnapshotFolder', N' C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA', 'user', dbo, 'table', 'UIProperties';
ELSE
EXECUTE sp_addextendedproperty N'SnapshotFolder', N' C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA', 'user', dbo, 'table', 'UIProperties';
Следующий скрипт настраивает издателя для использования базы данных распространителя и определяет имя входа пользователя AD, а также пароль, используемый для репликации:
EXECUTE sp_adddistpublisher
@publisher = N'publisher_db',
@distribution_db = N'distribution_db',
@security_mode = 0,
@login = N'newuser@tenant.com',
@password = N'password',
@working_directory = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\ReplData',
@trusted = N'false',
@thirdparty_flag = 0,
@publisher_type = N'MSSQLSERVER';
Включение репликации
Используйте sp_replicationdboption для включения репликации в базе данных издателя, например testdbв следующем примере:
EXECUTE sp_replicationdboption
@dbname = N'testdb',
@optname = N'publish',
@value = N'true';
Добавление публикации
Используйте sp_addpublication для добавления публикации.
Вы можете настроить репликацию транзакций или моментальных снимков.
Выполните следующие действия, чтобы создать репликацию транзакций.
Сначала настройте агент чтения журналов:
USE [AdventureWorksDB];
EXECUTE [AdventureWorksDB].sys.sp_addlogreader_agent
@job_login = NULL,
@job_password = NULL,
@publisher_security_mode = 2,
@publisher_login = N'newuser@tenant.com',
@publisher_password = N'<password>',
@job_name = NULL;
Затем создайте публикацию транзакций:
use [AdventureWorksDB]
exec sp_addpublication @publication = N'AdvWorksProducTrans',
@description = N'Publication of database ''AdventureWorksDB'' from Publisher 'N'publisher_db''.',
@sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true',
@allow_anonymous = N'false', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true',
@compress_snapshot = N'false', @ftp_port = 21, @allow_subscription_copy = N'false',
@add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active',
@independent_agent = N'true', @immediate_sync = N'false', @allow_sync_tran = N'true',
@allow_queued_tran = N'true', @allow_dts = N'false', @replicate_ddl = 1,
@allow_initialize_from_backup = N'false', @enabled_for_p2p = N'false',
@enabled_for_het_sub = N'false', @conflict_policy = N'pub wins'
Затем создайте агент моментальных снимков и сохраните файлы моментальных снимков для издателя, используя имя входа Microsoft Entra для @publisher_login и задавая пароль для издателя.
USE [AdventureWorksDB];
EXECUTE sp_addpublication_snapshot
@publication = N'AdvWorksProducTrans',
@frequency_type = 1,
@frequency_interval = 1,
@frequency_relative_interval = 1,
@frequency_recurrence_factor = 0,
@frequency_subday = 8,
@frequency_subday_interval = 1,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 0,
@active_end_date = 0,
@job_login = NULL,
@job_password = NULL,
@publisher_security_mode = 2,
@publisher_login = N'newuser@tenant.com',
@publisher_password = N'<password>';
Наконец, добавьте статью TestPub в публикацию:
USE [AdventureWorksDB];
EXECUTE sp_addarticle
@publication = N'AdvWorksProducTrans',
@article = N'testtable',
@source_owner = N'dbo',
@source_object = N'testtable',
@type = N'logbased',
@description = NULL,
@creation_script = NULL,
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509D,
@identityrangemanagementoption = N'manual',
@destination_table = N'testtable',
@destination_owner = N'dbo',
@vertical_partition = N'false';
Создавать подписку
Используйте sp_addsubscription для добавления подписчика, а затем используйте sp_addpushsubscription_agent на издателе, чтобы создать push-синхронизацию или sp_addpullsubscription_agent на подписчике, чтобы создать pull-синхронизацию. Используйте имя входа Microsoft Entra для @subscriber_login.
Следующий пример скрипта добавляет подписку:
USE [testdb];
EXECUTE sp_addsubscription
@publication = N'testpub',
@subscriber = N'<subscription_server>',
@destination_db = N'testdb',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0;
Следующий пример скрипта добавляет агент принудительной подписки на издателе:
EXECUTE sp_addpushsubscription_agent
@publication = N'testpub',
@subscriber = N'<subscription server.',
@subscriber_db = N'testdb',
@job_login = NULL,
@job_password = NULL,
@subscriber_security_mode = 2,
@subscriber_login = N'newuser@tenant.com',
@subscriber_password = 'password',
@frequency_type = 64,
@frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0,
@frequency_subday_interval = 0,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 20220406,
@active_end_date = 99991231,
@enabled_for_syncmgr = N'False',
@dts_package_location = N'Distributor';
Хранимые процедуры репликации
Следующие параметры в этих хранимых процедурах репликации были изменены в SQL Server 2022 (16.x) CU 6 для поддержки проверки подлинности Microsoft Entra для репликации:
-
sp_addpullsubscription_agent:
@distributor_security_mode -
sp_addpushsubscription_agent:
@subscriber_security_mode -
sp_addmergepullsubscription_agent:
@publisher_security_mode,@distributor_security_mode -
sp_addmergepushsubscription_agent:
@subscriber_security_mode,@publisher_security_mode -
sp_addlogreader_agent
@publisher_security_mode -
sp_changelogreader_agent:
@publisher_security_mode -
sp_addpublication_snapshot:
@publisher_security_mode -
sp_changepublication_snapshot:
@publisher_security_mode
Следующие значения определяют режимы безопасности для этих хранимых процедур:
-
0указывает проверку подлинности SQL Server. -
1указывает проверку подлинности Windows. -
2указывает проверку подлинности паролей Microsoft Entra, начиная с SQL Server 2022 CU 6. -
3указывает встроенную проверку подлинности Microsoft Entra, начиная с SQL Server 2022 CU 6. -
4указывает проверку подлинности токена Microsoft Entra, начиная с SQL Server 2022 CU 6.