Configurar la replicación con autenticación de Microsoft Entra: SQL Server habilitado por Azure Arc

Se aplica a: SQL Server 2022 (16.x)

En este artículo se proporcionan los pasos para configurar la replicación transaccional y de instantáneas mediante la autenticación de Microsoft Entra ID (anteriormente, Azure Active Directory) para SQL Server habilitado para Azure Arc.

Información general

La compatibilidad con la autenticación de Microsoft Entra para la replicación se introdujo en la actualización acumulativa 6 para SQL Server 2022 y se puso a disposición con carácter general en la actualización acumulativa 12. Al usar la autenticación de Microsoft Entra para la replicación, el único paso diferente es el primer paso. En concreto, cree un inicio de sesión de Microsoft Entra y conceda permisos sysadmin.

A continuación, use el inicio de sesión de Microsoft Entra en los procedimientos almacenados de replicación para configurar la replicación transaccional o de instantáneas como lo haría normalmente.

Nota:

A partir de SQL Server 2022 CU 6, deshabilita la autenticación de Microsoft Entra para la replicación mediante la marca de seguimiento de sesión 11561.

Requisitos previos

Para configurar la replicación con la autenticación de Microsoft Entra, debes cumplir los siguientes requisitos previos:

Limitaciones

La configuración de la replicación con la autenticación de Microsoft Entra actualmente tiene las siguientes limitaciones:

  • Actualmente solo es posible configurar la replicación mediante Transact-SQL (T-SQL) y los procedimientos almacenados de replicación, el Asistente para replicación en SSMS 19.1 o una versión superior o Azure Data Studio. Actualmente no es posible configurar la replicación mediante objetos de replicación RMO u otros lenguajes de línea de comandos.
  • Cada servidor de la topología de replicación debe estar en al menos SQL Server 2022 CU 6. Las versiones anteriores de SQL Server no son compatibles.

Crear un inicio de sesión de SQL a partir de Microsoft Entra ID

Cree el inicio de sesión de Microsoft Entra y concédale el rol sysadmin.

Para crear un inicio de sesión de Microsoft Entra y asignarlo como sysadmin, usa el siguiente comando de Transact-SQL (T-SQL):

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

Por ejemplo, para agregar el nombre de inicio de sesión 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' 

Creación de la base de datos de distribución

Use sp_adddistributiondb para crear la base de datos de distribución.

A continuación se muestra un script de ejemplo para crear la base de datos de distribución en el 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 

En el ejemplo siguiente se crea la tabla UIProperties en la base de datos de distribución y se establece la propiedad SnapshotFolder para que el agente de instantáneas sepa dónde escribir instantáneas de replicación:

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' 

El siguiente script configura el publicador para que use la base de datos del distribuidor y define el inicio de sesión de usuario de AD, junto con una contraseña que se usará para la replicación:

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 replicación

Use sp_replicationdboption para habilitar la replicación en la base de datos del publicador, como testdb, como en el ejemplo siguiente:

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

Adición de la publicación

Use sp_addpublication para agregar la publicación.

Puede configurar la replicación transaccional o de instantáneas.

Para crear una replicación transaccional, siga estos pasos.

En primer lugar, configure el agente de registro del log:

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 

A continuación, cree la publicación transaccional:

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' 

Después, crea el Agente de instantáneas y almacena los archivos de instantánea para el publicador mediante el inicio de sesión de Microsoft Entra para @publisher_login y define una contraseña para el 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 último, agregue el artículo TestPub a la publicación:

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' 

Crear suscripción

Use sp_addsubscription para agregar el suscriptor y, a continuación, use sp_addpushsubscription_agent en el publicador para crear una suscripción de inserción o sp_addpullsubscription_agent en el suscriptor para crear una suscripción de extracción. Usa el inicio de sesión de Microsoft Entra para el @subscriber_login.

El siguiente script de ejemplo agrega la suscripción:

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 

El siguiente script de ejemplo agrega un agente de suscripción de inserción en el 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' 

Procedimientos almacenados de replicación

Los parámetros siguientes de estos procedimientos almacenados de replicación se modificaron en CU 6 para SQL Server 2022 para admitir la autenticación de Microsoft Entra para la replicación:

Los siguientes valores definen los modos de seguridad para estos procedimientos almacenados:

  • 0 especifica la autenticación de SQL Server.
  • 1 especifica la autenticación de Windows.
  • 2 especifica la autenticación de contraseña de Microsoft Entra a partir de SQL Server 2022 CU 6.
  • 3 especifica la autenticación integrada de Microsoft Entra a partir de SQL Server 2022 CU 6.
  • 4 especifica la autenticación de token de Microsoft Entra a partir de SQL Server 2022 CU 6.

Pasos siguientes

Para obtener más información, consulta Replicación de SQL Server y Autenticación de Microsoft Entra para SQL Server