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:
- Tener SQL Server 2022 habilitado para Azure Arc a partir de la actualización acumulativa 6.
- La autenticación de Microsoft Entra configurada para cada servidor de la topología de replicación. Revisa Tutorial: Configuración de la autenticación de Microsoft Entra para SQL Server para obtener más información.
- SQL Server Management Studio (SSMS) 19.1 o una versión superior o Azure Data Studio.
- El usuario que se conecta al editor y al suscriptor es miembro del rol fijo de servidor sysadmin.
- La conexión debe cifrarse mediante un certificado de una entidad de certificación (CA) de confianza o un certificado autofirmado.
- Si se usa un certificado autofirmado, se debe importar al equipo cliente e instalarlo en la lista de Certificados de confianza para que el cliente confíe en SQL Server. Este requisito no se puede omitir seleccionando la opción Certificado de servidor de confianza en SQL Server Management Studio (SSMS), ya que no funciona con la replicación.
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:
- 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
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