Configurar a replicação com a autenticação do Microsoft Entra: o SQL Server habilitado pelo Azure Arc

Aplica-se a: SQL Server 2022 (16.x)

Este artigo fornece as etapas para configurar a replicação transacional e de instantâneos usando autenticação com o Microsoft Entra ID (anteriormente Azure Active Directory) para SQL Server habilitado para Azure-Arc.

Visão geral

O suporte à autenticação do Microsoft Entra para replicação foi introduzido na Atualização Cumulativa 6 para o SQL Server 2022 e disponibilizado para o público geral na Atualização Cumulativa 12. Quando você usa a autenticação do Microsoft Entra para replicação, a única etapa diferente é a primeira. Especificamente, crie um logon do Microsoft Entra e realize a concessão de permissões sysadmin.

Após essa etapa, use esse logon do Microsoft Entra nos procedimentos armazenados de duplicação para configurar a duplicação Transacional ou de Instantâneo como faria normalmente.

Observação

A partir do SQL Server 2022 CU 6, desabilite a autenticação do Microsoft Entra para replicação usando o sinalizador de rastreamento de sessão 11561.

Pré-requisitos

Para configurar a replicação com a autenticação do Microsoft Entra, você deve atender aos seguintes pré-requisitos:

Limitações

Atualmente, a configuração de sua replicação com a autenticação do Microsoft Entra tem as seguintes limitações:

  • Atualmente, só é possível configurar a replicação usando Transact-SQL (T-SQL) e os procedimentos armazenados de replicação, o Assistente de Replicação no SSMS v19.1 ou superior ou o Azure Data Studio. No momento, não é possível configurar a replicação usando objetos de replicação RMO ou outras linguagens de linha de comando.
  • Todos os servidores na topologia de replicação devem ter, no mínimo, o SQL Server 2022 CU 6. Não há suporte para versões anteriores do SQL Server.

Criar um logon do SQL no Microsoft Entra

Crie o logon do Microsoft Entra e realize a concessão da função sysadmin a ele.

Para criar o logon do Microsoft Entra e designá-lo como um sysadmin, use o seguinte comando Transact-SQL (T-SQL):

USE master
CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER
EXEC sp_addsrvrolemember @loginame='login_name', @rolename='sysadmin' 

Por exemplo, para adicionar o nome de logon para newuser@tenant.com, use este comando:

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

Criar banco de dados de distribuição

Use sp_adddistributiondb para criar o banco de dados de distribuição.

A seguir, um exemplo de script para criar o banco de dados de distribuição no seu Distribuidor:

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 

O exemplo a seguir cria a tabela UIProperties no banco de dados de distribuição e define a propriedade SnapshotFolder para que o agente de instantâneos saiba onde gravar instantâneos de replicação:

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' 

O script a seguir configura o Publicador para usar o banco de dados do Distribuidor e define o logon do usuário do AD, juntamente com uma senha a ser usada para replicação:

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' 

Habilitar a replicação

Use sp_replicationdboption para habilitar a replicação em seu banco de dados do Publicador, como testdb, conforme o exemplo a seguir:

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

Adicionar a publicação

Use sp_addpublication para adicionar a publicação.

Você pode configurar a replicação transacional ou de instantâneos.

Siga estas etapas para criar uma replicação transacional.

Primeiro, configure o agente leitor de logs:

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 

Em seguida, crie a publicação transacional:

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' 

Em seguida, crie o agente de instantâneos e armazene os arquivos de instantâneos para o Publicador usando o Microsoft Entra para o @publisher_login e definindo uma senha para o Publicador:

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

Por fim, adicione o artigo TestPub à publicação:

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' 

Criar Assinatura

Use sp_addsubscription para adicionar seu Assinante e, em seguida, use sp_addpushsubscription_agent no Publicador para criar uma assinatura push ou sp_addpullsubscription_agent no Assinante para criar uma assinatura pull. Use o logon do Microsoft Entra para o @subscriber_login.

O script de exemplo a seguir adiciona a assinatura:

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 

O script de amostra a seguir adiciona um agente de assinatura push no Publicador:

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' 

Procedimentos armazenados de replicação

Os seguintes parâmetros nesses procedimentos armazenados de replicação foram modificados na CU 6 do SQL Server 2022 para oferecer suporte à autenticação do Microsoft Entra para replicação:

Os valores a seguir definem os modos de segurança para esses procedimentos armazenados:

  • 0 especifica a autenticação do SQL Server.
  • 1 especifica autenticação do Windows.
  • 2 especifica a autenticação de senha do Microsoft Entra a partir do SQL Server 2022 CU 6.
  • 3 especifica a autenticação integrada do Microsoft Entra a partir do SQL Server 2022 CU 6.
  • 4 especifica a autenticação de token do Microsoft Entra a partir do SQL Server 2022 CU 6.

Próximas etapas

Para saber mais, consulte Replicação do SQL Server e Autenticação do Microsoft Entra para o SQL Server