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

レプリケーション エージェントのセキュリティ モデルを使用すると、レプリケーション エージェントを実行して接続するアカウントをきめ細かく制御できます。エージェントごとに異なるアカウントを指定できます。 アカウントを指定する方法の詳細については、「レプリケーションのログインとパスワードの管理」を参照してください。

重要な注意事項重要

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

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

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

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

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

    注意

    ActiveX コントロールは推奨されません。

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

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

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

注意

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

エージェント

権限

スナップショット エージェント

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

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

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

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

ログ リーダー エージェント

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

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

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

プッシュ サブスクリプションのディストリビューション エージェント

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

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

  • PAL のメンバーである。

  • スナップショット共有の読み取り権限を持っている。

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

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

注意

ディストリビューション エージェントで -subscriptionstreams >= 2 を使用する場合は、デッドロックを検出するためにサブスクライバーに対する View Server State 権限を与える必要があります。

プル サブスクリプションのディストリビューション エージェント

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

ディストリビューターへの接続に使用されるアカウントは、次の条件を満たしている必要があります。

  • PAL のメンバーである。

  • スナップショット共有の読み取り権限を持っている。

注意

ディストリビューション エージェントで -subscriptionstreams >= 2 を使用する場合は、デッドロックを検出するためにサブスクライバーに対する View Server State 権限を与える必要があります。

プッシュ サブスクリプションのマージ エージェント

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

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

  • PAL のメンバーである。

  • パブリケーション データベースのユーザーに関連付けられたログインである。

  • スナップショット共有の読み取り権限を持っている。

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

プル サブスクリプションのマージ エージェント

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

パブリッシャーおよびディストリビューターへの接続に使用されるアカウントは、次の条件を満たしている必要があります。

  • PAL のメンバーである。

  • パブリケーション データベースのユーザーに関連付けられたログインである。

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

  • スナップショット共有の読み取り権限を持っている。

キュー リーダー エージェント

このエージェントを実行する 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>

ログ リーダー エージェント

<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>

キュー リーダー エージェント

[<Distributor>].<integer>

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

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

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

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

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

注意

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

関連項目

概念

レプリケーション セキュリティの推奨事項

スナップショット フォルダーのセキュリティ保護

その他の技術情報

セキュリティと保護 (レプリケーション)