Azure Arc 対応 SQL Server 用の Microsoft Entra 認証を使用してレプリケーションを構成する

適用対象: 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 ログインを使用して、通常どおりトランザクション レプリケーションまたはスナップショット レプリケーションを構成します。

Note

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 を信頼できる証明書の一覧にインストールする必要があります。 この要件は、SQL Server Management Studio (SSMS) で [信頼サーバー証明書] オプションを選択しても、レプリケーションでは機能しないためバイパスできません。

制限事項

Microsoft Entra 認証を使用してレプリケーションを構成する際の制限は、現在次のようになっています。

  • 現時点では、Transact-SQL (T-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 として割り当てるには、次の Transact-SQL (T-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' 

レプリケーションを有効にする

次の例のように testdbsp_replicationdboption を使用してパブリッシャー データベースのレプリケーションを有効にします。

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

パブリケーションを追加する

sp_addpublication を使用してパブリケーションを追加します。

トランザクション レプリケーションまたはスナップショット レプリケーションを構成できます。

トランザクション レプリケーションを作成するには、次の手順に従います。

まず、ログ リーダー エージェントを構成します。

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 認証」を確認してください