Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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';
Например, чтобы добавить имя [email protected]для входа, используйте следующую команду:
USE master;
CREATE LOGIN [[email protected]]
FROM EXTERNAL PROVIDER;
EXECUTE sp_addsrvrolemember
@loginame = '[email protected]',
@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'[email protected]',
@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'[email protected]',
@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'[email protected]',
@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 на подписчике, чтобы создать подписку на вытягивание. Используйте имя входа 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'[email protected]',
@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.