レプリケーション エージェントのセキュリティ モデル

適用対象: はいSQL Server (サポートされているすべてのバージョン)

レプリケーション エージェントのセキュリティ モデルでは、レプリケーション エージェントの実行や接続に使用されるアカウントをきめ細かく制御できます。異なるアカウントをエージェントごとに指定できます。 アカウントを指定する方法の詳細については、「ID およびアクセス制御 (レプリケーション)」を参照してください。

エージェントを実行する Windows アカウントがないため、Azure SQL Managed Instance のレプリケーション エージェントのセキュリティ モデルは少し異なります。 代わりに、SQL Server 認証を使用してすべての操作を行う必要があります。

重要

sysadmin 固定サーバー ロールのメンバーがレプリケーションを構成する際には、 SQL Server エージェント アカウントの権限を借用するようにレプリケーション エージェントを構成できます。 このとき、レプリケーション エージェントのログインとパスワードを指定する必要はありませんが、その方法はお勧めしません。 セキュリティ上、このトピックの「エージェントに必要な権限」に記載されている最小限の権限を持った各エージェントのアカウントを指定することをお勧めします。

レプリケーション エージェントは、他の実行可能プログラムと同様に、Windows アカウントのコンテキストで実行されます。 このアカウントを使用して、Windows 統合セキュリティ接続が作成されます。 エージェントを実行するアカウントは、エージェントの開始方法で決まります。

  • SQL Server エージェント ジョブからエージェントを開始する (既定): SQL Server エージェント ジョブを使用してレプリケーション エージェントを開始すると、エージェントはレプリケーションを構成するときに指定したアカウントのコンテキストで実行されます。 SQL Server エージェントおよびレプリケーションの詳細については、このトピックの「SQL Server エージェントのエージェント セキュリティ」を参照してください。 SQL Server エージェントを実行するアカウントに必要な権限の詳細については、「Configure SQL Server Agent」 (SQL Server エージェントの構成) を参照してください。

  • MS-DOS コマンド ラインから直接、またはスクリプトによってエージェントを開始する: エージェントは、コマンド ラインでエージェントを実行しているユーザーのアカウントのコンテキストで実行されます。

  • レプリケーション管理オブジェクト (RMO) を使用するアプリケーションまたは ActiveX コントロールからエージェントを開始する: エージェントは、RMO を呼び出しているアプリケーションまたは ActiveX コントロールのコンテキストで実行されます。

    注意

    ActiveX コントロールは非推奨とされます。

Windows 統合セキュリティのコンテキストで接続することをお勧めします。 また、旧バージョンとの互換性のために SQL Server セキュリティを使用できます。 推奨事項の詳細については、「 Replication Security Best Practices」を参照してください。

エージェントに必要な権限

エージェントを実行して接続するアカウントには、さまざまな権限が必要です。 これらの権限を次の表に詳しく示します。 各エージェントは異なる Windows アカウントで実行することをお勧めします。また、このアカウントには、必要な権限のみ許可してください。 複数のエージェントに関連するパブリケーション アクセス リスト (PAL) の詳細については、「Secure the Publisher」 (パブリッシャーのセキュリティ保護) を参照してください。

注意

特定の Windows オペレーティング システム内のユーザー アカウント制御 (UAC) により、スナップショット共有への管理アクセスが妨害される場合があります。 このため、スナップショット エージェント、ディストリビューション エージェント、およびマージ エージェントによって使用される Windows アカウントに、スナップショット共有の権限を明示的に与える必要があります。 この操作は、Windows アカウントが Administrators グループのメンバーである場合にも必要です。 詳細については、「Secure the Snapshot Folder」(スナップショット フォルダーのセキュリティ保護) をご覧ください。

エージェント アクセス許可
スナップショット エージェント このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、次の条件を満たしている必要があります。

- 最低でも、ディストリビューション データベースで db_owner 固定データベース ロールのメンバーである。

- スナップショット共有に対する読み取り、書き込み、変更権限がある。



パブリッシャーへの 接続 に使用されるアカウントは、最低でもパブリケーション データベースの db_owner 固定データベース ロールのメンバーである必要があります。
ログ リーダー エージェント (Log Reader Agent) このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、最低でもディストリビューション データベースの db_owner 固定データベース ロールのメンバーである必要があります。

パブリッシャーへの接続に使用されるアカウントは、最低でもパブリケーション データベースの db_owner 固定データベース ロールのメンバーである必要があります。

sync_type オプション replication support onlyinitialize with backup、または initialize from lsn を選択した場合、 sp_addsubscription の実行後にログ リーダー エージェントを実行して、スクリプトの設定がディストリビューション データベースに書き込まれるようにする必要があります。 ログ リーダー エージェントが、 sysadmin 固定サーバー ロールのメンバーであるアカウントで実行されている必要があります。 sync_type オプションが Automatic に設定されている場合、特別なログ リーダー エージェントの操作は必要ありません。
プッシュ サブスクリプションのディストリビューション エージェント このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、次の条件を満たしている必要があります。

- 最低でも、ディストリビューション データベースで db_owner 固定データベース ロールのメンバーである。

- PAL のメンバーである。

- スナップショット共有に対する読み取り権限を持っている。

- サブスクリプションが SQL Server 以外のサブスクライバー用の場合、サブスクライバーの OLE DB プロバイダーのインストール ディレクトリに対する読み取り権限を持っている。

- LOB データをレプリケートする場合、ディストリビューション エージェントにはレプリケーションの C:\Program Files\Microsoft SQL Server\XX\COMfolder に対する書き込みアクセス許可が必要です。ここで XX はインスタンス ID を表します。



- サブスクライバーへの 接続 に使用されるアカウントは、最低でもサブスクリプション データベースの db_owner 固定データベース ロールのメンバーである必要があります。サブスクリプションが SQL Server 以外のサブスクライバー用である場合は、同等の権限を持っている必要があります。

また、ディストリビューション エージェントで -subscriptionstreams >= 2 を使用する場合は、デッドロックを検出するためにサブスクライバーに対する View Server State 権限を与える必要があります。
プル サブスクリプションのディストリビューション エージェント このエージェントを実行する Windows アカウントは、サブスクライバーに接続するときに使用されます。 このアカウントは、最低でもサブスクリプション データベースの db_owner 固定データベース ロールのメンバーである必要があります。 ディストリビューターへの接続に使用されるアカウントは、次の条件を満たしている必要があります。

- PAL のメンバーである。

- スナップショット共有に対する読み取り権限を持っている。

- LOB データをレプリケートする場合、ディストリビューション エージェントにはレプリケーションの C:\Program Files\Microsoft SQL Server\XX\COMfolder に対する書き込みアクセス許可が必要です。ここで XX はインスタンス ID を表します。



ディストリビューション エージェントで -subscriptionstreams >= 2 を使用する場合は、デッドロックを検出するためにサブスクライバーに対する View Server State 権限を与える必要があります。
プッシュ サブスクリプションのマージ エージェント このエージェントを実行する Windows アカウントは、パブリッシャーおよびディストリビューターに接続するときに使用されます。 このアカウントは、次の条件を満たしている必要があります。

- 最低でも、ディストリビューション データベースで db_owner 固定データベース ロールのメンバーである。

- PAL のメンバーである。

- パブリケーション データベースでの読み取り/書き込みアクセス許可を持つユーザーに関連付けられたログインである。

- スナップショット共有に対する読み取り権限を持っている。



サブスクライバーへの 接続 に使用されるアカウントは、最低でもサブスクリプション データベースの db_owner 固定データベース ロールのメンバーである必要があります。
プル サブスクリプションのマージ エージェント このエージェントを実行する Windows アカウントは、サブスクライバーに接続するときに使用されます。 このアカウントは、最低でもサブスクリプション データベースの db_owner 固定データベース ロールのメンバーである必要があります。 パブリッシャーおよびディストリビューターへの接続に使用されるアカウントは、次の条件を満たしている必要があります。

- PAL のメンバーである。

- パブリケーション データベースでの読み取り/書き込みアクセス許可を持つユーザーに関連付けられたログインである。

- ディストリビューション データベース内のユーザーに関連付けられたログインである。 Guest ユーザーでもかまいません。

- スナップショット共有に対する読み取り権限を持っている。
キュー リーダー エージェント (Queue Reader Agent) このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、最低でもディストリビューション データベースの db_owner 固定データベース ロールのメンバーである必要があります。

パブリッシャーへの接続に使用されるアカウントは、最低でもパブリケーション データベースの db_owner 固定データベース ロールのメンバーである必要があります。

サブスクライバーへの接続に使用されるアカウントは、最低でもサブスクリプション データベースの db_owner 固定データベース ロールのメンバーである必要があります。

SQL Server エージェントのエージェント セキュリティ

SQL Server Management Studio、 Transact-SQL プロシージャ、または RMO を使用してレプリケーションを構成すると、既定では各エージェントの SQL Server エージェント ジョブが作成されます。 その後エージェントは、連続実行、スケジュールを基にした実行、要求時実行にかかわらず、ジョブ ステップのコンテキストで実行されます。 これらのジョブは、 [ジョブ] SQL Server Management Studioフォルダーで表示できます。 次の表にジョブ名の一覧を示します。

エージェント ジョブ名
スナップショット エージェント <Publisher>-<PublicationDatabase>-<Publication>-<integer>
マージ パブリケーション パーティションに対するスナップショット エージェント Dyn_<Publisher>-<PublicationDatabase>-<Publication>-<GUID>
ログ リーダー エージェント (Log Reader Agent) <Publisher>-<PublicationDatabase>-<integer>
プル サブスクリプションに対するマージ エージェント <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<integer>
プッシュ サブスクリプションに対するマージ エージェント <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>
プッシュ サブスクリプションに対するディストリビューション エージェント <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>
プル サブスクリプションに対するディストリビューション エージェント <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<GUID>
SQL Server 以外のサブスクライバーへのプッシュ サブスクリプションに対するディストリビューション エージェント <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>
キュー リーダー エージェント (Queue Reader Agent) [<Distributor>].<integer>

*Oracle パブリケーションに対するプッシュ サブスクリプションの場合、ジョブ名は <Publisher>-<PublicationDatabase> ではなく <Publisher>-<Publisher> になります。

**Oracle パブリケーションに対するプル サブスクリプションの場合、ジョブ名は <Publisher>-<PublicationDatabase> ではなく <Publisher>-<DistributionDatabase> になります。

レプリケーションの構成時には、エージェントを実行するアカウントを指定します。 しかし、すべてのジョブ ステップは プロキシ のセキュリティ コンテキストで実行されます。そのためレプリケーションでは、指定したエージェント アカウントに対して、以下のマッピングが内部的に実行されます。

  • アカウントは、まず Transact-SQL CREATE CREDENTIAL ステートメントを使用して資格情報にマップされます。 SQL Server エージェント プロキシは、資格情報を使用して Windows ユーザー アカウントに関する情報を格納します。

  • sp_add_proxy ストアド プロシージャが呼び出され、資格情報を使用してプロキシが作成されます。

注意

この情報は、適切なセキュリティ コンテキストでエージェントを実行する作業についての理解を深めるために提供されています。 作成済みの資格情報またはプロキシは通常、直接操作する必要はありません。

参照

Replication Security Best Practices
レプリケーションのセキュリティ設定の表示および変更
スナップショット フォルダーのセキュリティ保護