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:
- Ter o SQL Server 2022 habilitado pelo Azure Arc a partir da Atualização Cumulativa 6.
- Autenticação do Microsoft Entra configurada para cada servidor na topologia de replicação. Para saber mais, consulte Tutorial: configurar a autenticação do Microsoft Entra para o SQL Server.
- SQL Server Management Studio (SSMS) v19.1 ou superior ou Azure Data Studio.
- O usuário que se conecta ao Publicador e ao Assinante é membro da função de servidor fixa sysadmin.
- A conexão deve ser criptografada usando um certificado de uma autoridade de certificação (CA) confiável ou um certificado autoassinado.
- Se for usado um certificado autoassinado, ele deverá ser importado para o computador do cliente e instalado na lista de Certificados confiáveis para que o cliente confie no SQL Server. Esse requisito não pode ser contornado com a seleção da opção Confiar no certificado do servidor no SQL Server Management Studio (SSMS), pois não funciona com a replicação.
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:
- 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
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