Microsoft Entra 인증을 사용하여 복제 구성 - Azure Arc에서 사용하도록 설정된 SQL Server

적용 대상: SQL Server 2022(16.x)

이 문서에서는 Azure-Arc 지원 SQL Server에 대해 Microsoft Entra ID(이전의 Azure Active Directory)로 인증을 사용하여 트랜잭션 및 스냅샷 복제를 구성하는 단계를 제공합니다.

개요

복제에 대한 Microsoft Entra 인증 지원은 SQL Server 2022용 누적 업데이트 6에서 도입되었으며, 누적 업데이트 12에서 일반 공급되었습니다. 복제에 Microsoft Entra 인증을 사용하는 경우 유일한 단계는 첫 번째 단계입니다. 특히 Microsoft Entra 로그인을 만들고 sysadmin 권한을 부여합니다.

그런 다음 복제 저장 프로시저에서 Microsoft Entra 로그인을 사용하여 일반적인 방식으로 트랜잭션 또는 스냅샷 복제를 구성합니다.

참고 항목

SQL Server 2022 CU 6부터 세션 추적 플래그 11561을 사용하여 복제에 Microsoft Entra 인증을 사용하지 않도록 설정합니다.

필수 조건

Microsoft Entra 인증을 사용하여 복제를 구성하려면 다음 필수 조건을 충족해야 합니다.

  • 누적 업데이트 6부터 Azure-Arc 지원 SQL Server 2022를 사용하도록 설정합니다.
  • 복제 토폴로지의 모든 서버에 대해 Microsoft Entra 인증을 구성했습니다. 자습서: SQL Server에 Microsoft Entra 인증 설정하기를 검토하여 더 알아보기
  • SQL Server Management Studio (SSMS) v19.1 이상 또는 Azure Data Studio
  • 게시자 및 구독자에 대한 사용자의 연결은 sysadmin 고정 서버 역할의 멤버입니다.
  • 신뢰할 수 있는 CA(인증 기관) 또는 자체 서명된 인증서의 인증서를 사용하여 연결을 암호화해야 합니다.
    • 자체 서명된 인증서를 사용하는 경우 클라이언트 컴퓨터로 가져와서 클라이언트가 SQL Server를 신뢰하도록 신뢰할 수 있는 인증서 목록에 설치해야 합니다. 이 요구 사항은 복제에서 작동하지 않으므로 SSMS(SQL Server Management Studio)에서 서버 인증서 신뢰 옵션을 선택하여 무시할 수 없습니다.

제한 사항

Microsoft Entra 인증을 사용하여 복제를 구성하는 데는 현재 다음과 같은 제한 사항이 있습니다.

  • 현재는 T-SQL(Transact-SQL) 및 복제 저장 프로시저, SSMS v19.1 이상의 복제 마법사 또는 Azure Data Studio를 사용하여 복제를 구성할 수 있습니다. 현재 RMO 복제 개체 또는 기타 명령줄 언어를 사용하여 복제를 구성할 수 없습니다.
  • 복제 토폴로지의 모든 서버는 SQL Server 2022 CU 6 이상에 있어야 합니다. 이전 SQL Server 버전은 지원되지 않습니다.

Microsoft Entra ID로 SQL 로그인 만들기

Microsoft Entra 로그인을 만들고 sysadmin 역할을 부여합니다.

Microsoft Entra 로그인을 만들고 sysadmin로 할당하려면 다음 T-SQL(Transact-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_replicationdboption를 사용하여 testdb와 같은 Publisher 데이터베이스에서 복제를 사용하도록 설정합니다.

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

게시물 추가

sp_replicationdboption를 사용하여 게시물을 추가합니다.

트랜잭션 또는 스냅샷 복제를 구성할 수 있습니다.

다음 단계에 따라 트랜잭션 복제를 만듭니다.

먼저 로그 판독기 에이전트를 구성합니다.

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' 

그런 다음, 스냅샷 에이전트를 만들고 @publisher_login에 대해 Microsoft Entra 로그인을 사용하고 게시자에 대한 비밀번호를 정의하여 게시자에 대한 스냅샷 파일을 저장합니다.

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를 사용하여 밀어넣기 구독을 만들거나 구독자에 대해 sp_addpullsubscription_agent 끌어오기 구독을 만듭니다. @subscriber_login에 대한 Microsoft Entra 로그인을 사용합니다.

다음 샘플 스크립트는 구독을 추가합니다.

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' 

복제 저장 프로시저

이러한 복제 저장 프로시저의 다음 매개 변수는 복제에 대한 Microsoft Entra 인증을 지원하도록 SQL Server 2022용 CU 6에서 수정되었습니다.

다음 값은 이러한 저장 프로시저에 대한 보안 모드를 정의합니다.

  • 0 은 SQL Server 인증을 지정합니다.
  • 1 Windows 인증을 지정합니다.
  • 2 는 SQL Server 2022 CU 6부터 Microsoft Entra 암호 인증을 지정합니다.
  • 3 은 SQL Server 2022 CU 6부터 Microsoft Entra 통합 인증을 지정합니다.
  • 4 는 SQL Server 2022 CU 6부터 Microsoft Entra 토큰 인증을 지정합니다.

다음 단계

자세한 내용은 SQL Server 복제SQL Server에 대한 Microsoft Entra 인증을 검토하세요.