Поделиться через


Настройка репликации с помощью проверки подлинности Microsoft Entra — SQL Server с поддержкой Azure Arc

Область применения: SQL Server 2022 (16.x)

В этой статье приведены инструкции по настройке репликации транзакций и моментальных снимков с помощью проверки подлинности с помощью идентификатора Microsoft Entra (ранее Azure Active Directory) для SQL Server с поддержкой Azure-Arc.

Обзор

Поддержка проверки подлинности Microsoft Entra для репликации появилась в накопительном обновлении 6 для SQL Server 2022 и стала общедоступной в накопительном обновлении 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) версии 19.1 или более поздней версии или Azure Data Studio.
  • Пользователь, подключающийся к издателю и подписчику, является членом предопределенных ролей сервера sysadmin .
  • Подключение должно быть зашифровано с помощью сертификата из доверенного центра сертификации (ЦС) или самозаверяющего сертификата.
    • Если используется самозаверяющий сертификат, его необходимо импортировать на клиентский компьютер и установить в список доверенных сертификатов, чтобы клиент доверял SQL Server. Это требование нельзя обойти, выбрав параметр сертификата сервера доверия в SQL Server Management Studio (SSMS), так как он не работает с репликацией.

Ограничения

Настройка репликации с помощью проверки подлинности Microsoft Entra в настоящее время имеет следующие ограничения:

  • Сейчас можно настроить репликацию только с помощью Transact-SQL (T-SQL) и хранимых процедур репликации, мастера репликации в SSMS версии 19.1 или более поздней версии или Azure Data Studio. В настоящее время невозможно настроить репликацию с помощью объектов репликации 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
EXEC sp_addsrvrolemember @loginame='login_name', @rolename='sysadmin' 

Например, чтобы добавить имя newuser@tenant.comдля входа, используйте следующую команду:

USE master
CREATE LOGIN [newuser@tenant.com] FROM EXTERNAL PROVIDER
EXEC sp_addsrvrolemember @loginame='newuser@tenant.com', @rolename='sysadmin' 

Создание базы данных распространителя

Используйте sp_adddistributiondb для создания базы данных распространителя.

Ниже приведен пример скрипта для создания базы данных распространителя на распространитете:

EXEC 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))) 
EXEC sp_updateextendedproperty N'SnapshotFolder', N' C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA', 
'user', dbo, 'table', 'UIProperties' 
ELSE 

EXEC sp_addextendedproperty N'SnapshotFolder', N' C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER22\MSSQL\DATA', 
'user', dbo, 'table', 'UIProperties' 

Следующий скрипт настраивает издателя для использования базы данных распространителя и определяет имя входа пользователя AD, а также пароль, используемый для репликации:

EXEC 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в следующем примере:

EXEC sp_replicationdboption @dbname = N'testdb', @optname = N'publish', @value = N'true' 

Добавление публикации

Используйте sp_addpublication для добавления публикации.

Вы можете настроить репликацию транзакций или моментальных снимков.

Выполните следующие действия, чтобы создать репликацию транзакций.

Сначала настройте агент чтения журналов:

USE [AdventureWorksDB] 
EXEC [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 
GO 

Затем создайте публикацию транзакций:

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] 
exec 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] 
exec 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] 
EXEC 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 

Следующий пример скрипта добавляет агент принудительной подписки на издателе:

EXEC 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' 

Хранимые процедуры репликации

Следующие параметры в этих хранимых процедурах репликации были изменены в накопительном пакете обновления 6 (CU 6) для SQL Server 2022 для поддержки проверки подлинности 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.

Следующие шаги

Дополнительные сведения см. в Репликация SQL Server и проверке подлинности Microsoft Entra для SQL Server