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

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

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

Обзор

Поддержка проверки подлинности Microsoft Entra для реплика tion появилась в накопительном обновлении 6 для SQL Server 2022 и стала общедоступной в накопительном обновлении 12. При использовании проверки подлинности Microsoft Entra для реплика tion единственным шагом является первый шаг. В частности, создайте имя входа Microsoft Entra и предоставьте разрешения sysadmin.

После этого используйте имя входа Microsoft Entra в хранимых процедурах реплика tion, чтобы настроить реплика транзакций или моментальных снимков, как обычно.

Примечание.

Начиная с SQL Server 2022 CU 6, отключите проверку подлинности Microsoft Entra для реплика tion с помощью флага трассировки сеанса 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 в настоящее время имеет следующие ограничения:

  • В настоящее время можно настроить реплика tion с помощью Transact-SQL (T-SQL) и хранимых процедур реплика, мастера репликации в SSMS версии 19.1 или более поздней версии или Azure Data Studio. В настоящее время невозможно настроить реплика tion с помощью объектов RMO реплика tion или других языков командной строки.
  • Каждый сервер в топологии реплика tion должен находиться по крайней мере на 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_реплика tiondboption, чтобы включить реплика tion в базе данных издателя, например testdbв следующем примере:

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

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

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

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

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

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

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 для SQL Server 2022 для поддержки проверки подлинности Microsoft Entra для реплика tion:

  • 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