レプリケーション エージェントのセキュリティ モデル
レプリケーション エージェントのセキュリティ モデルを使用すると、レプリケーション エージェントを実行して接続するアカウントをきめ細かく制御できます。エージェントごとに異なるアカウントを指定できます。 アカウントを指定する方法の詳細については、「レプリケーションのログインとパスワードの管理」を参照してください。
重要
sysadmin 固定サーバー ロールのメンバーがレプリケーションを構成する場合、SQL Server エージェントのアカウントを借用するようにレプリケーション エージェントを構成できます。 このとき、レプリケーション エージェントのログインとパスワードを指定する必要はありませんが、その方法はお勧めしません。 セキュリティ上、このトピックの「エージェントに必要な権限」に記載されている最小限の権限を持った各エージェントのアカウントを指定することをお勧めします。
レプリケーション エージェントは、他の実行可能プログラムと同様に、Windows アカウントのコンテキストで実行されます。 このアカウントを使用して、Windows 統合セキュリティ接続が作成されます。 エージェントを実行するアカウントは、エージェントの開始方法で決まります。
SQL Server エージェント ジョブからエージェントを開始する (既定): SQL Server エージェント ジョブを使用してレプリケーション エージェントを開始すると、エージェントはレプリケーションを構成するときに指定したアカウントのコンテキストで実行されます。 SQL Server エージェントおよびレプリケーションの詳細については、このトピックの「SQL Server エージェントのエージェント セキュリティ」を参照してください。 SQL Server エージェントを実行するアカウントに必要な権限の詳細については、「SQL Server エージェントの構成」を参照してください。
MS-DOS コマンド ラインから直接、またはスクリプトによってエージェントを開始する : エージェントは、コマンド ラインでエージェントを実行しているユーザーのアカウントのコンテキストで実行されます。
レプリケーション管理オブジェクト (RMO) を使用するアプリケーションまたは ActiveX コントロールからエージェントを開始する : エージェントは、RMO を呼び出しているアプリケーションまたは ActiveX コントロールのコンテキストで実行されます。
Note
ActiveX コントロールは非推奨とされます。
Windows 統合セキュリティのコンテキストで接続することをお勧めします。 旧バージョンとの互換性のために SQL Server セキュリティも使用できます。 推奨事項の詳細については、「 Replication Security Best Practices」を参照してください。
エージェントに必要な権限
エージェントを実行して接続するアカウントには、さまざまな権限が必要です。 これらの権限を次の表に詳しく示します。 各エージェントは異なる Windows アカウントで実行することをお勧めします。また、このアカウントには、必要な権限のみ許可してください。 複数のエージェントに関連するパブリケーション アクセス リスト (PAL) の詳細については、「Secure the Publisher」 (パブリッシャーのセキュリティ保護) を参照してください。
Note
特定の Windows オペレーティング システム内のユーザー アカウント制御 (UAC) により、スナップショット共有への管理アクセスが妨害される場合があります。 このため、スナップショット エージェント、ディストリビューション エージェント、およびマージ エージェントによって使用される Windows アカウントに、スナップショット共有の権限を明示的に与える必要があります。 この操作は、Windows アカウントが Administrators グループのメンバーである場合にも必要です。 詳細については、「Secure the Snapshot Folder」(スナップショット フォルダーのセキュリティ保護) をご覧ください。
エージェント | アクセス許可 |
---|---|
スナップショット エージェント | このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、次の条件を満たしている必要があります。 - 最低でも、ディストリビューション データベースで db_owner 固定データベース ロールのメンバーである。 - スナップショット共有に対する読み取り、書き込み、変更権限がある。 パブリッシャーへの接続に使用されるアカウントは、最低でもパブリケーション データベースの db_owner 固定データベース ロールのメンバーである必要があります。 |
ログ リーダー エージェント (Log Reader Agent) | このエージェントを実行する Windows アカウントは、ディストリビューターに接続するときに使用されます。 このアカウントは、最低でもディストリビューション データベースの db_owner 固定データベース ロールのメンバーである必要があります。 パブリッシャーへの接続に使用されるアカウントは、最低でもパブリケーション データベースの db_owner 固定データベース ロールのメンバーである必要があります。 sync_type オプションを選択バックアップを使用して初期化、または 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> 1 |
プル サブスクリプションに対するディストリビューション エージェント | <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<GUID> 2 |
SQL Server 以外のサブスクライバーへのプッシュ サブスクリプションに対するディストリビューション エージェント | <Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer> |
キュー リーダー エージェント (Queue Reader Agent) | [<ディストリビューター>].<整数> |
1 Oracle パブリケーションへのプッシュ サブスクリプションの場合、ジョブ名は <Publisher>-<PublicationDatabase> ではなく、<Publisher>-<Publisher> です。
2 Oracle パブリケーションへのプル サブスクリプションの場合、ジョブ名は <Publisher>-<PublicationDatabase> ではなく、<Publisher>-<DistributionDatabase> です。
レプリケーションの構成時には、エージェントを実行するアカウントを指定します。 しかし、すべてのジョブ ステップは プロキシのセキュリティ コンテキストで実行されます。そのためレプリケーションでは、指定したエージェント アカウントに対して、以下のマッピングが内部的に実行されます。
アカウントは、まず Transact-SQL CREATE CREDENTIAL ステートメントを使用して資格情報にマップされます。 SQL Server エージェント プロキシは、資格情報を使用して Windows ユーザー アカウントに関する情報を格納します。
sp_add_proxy ストアド プロシージャが呼び出され、資格情報を使用してプロキシが作成されます。
Note
この情報は、適切なセキュリティ コンテキストでエージェントを実行する作業についての理解を深めるために提供されています。 作成済みの資格情報またはプロキシは通常、直接操作する必要はありません。
参照
レプリケーション セキュリティの推奨事項
SQL Server レプリケーション セキュリティ
スナップショット フォルダーのセキュリティ保護