チュートリアル: レプリケーション用の SQL Server の準備 - パブリッシャー、ディストリビューター、サブスクライバー
適用対象: SQL Server
レプリケーション トポロジを構成するには、事前にセキュリティ計画を立てることが重要です。 このチュートリアルでは、レプリケーション トポロジのセキュリティを向上する方法について説明します。 また、データのレプリケーションの最初の手順である配布の構成方法についても説明します。 他のチュートリアルを行う前に、まずこのチュートリアルを実行してください。
Note
サーバー間でデータを安全にレプリケートするには、「レプリケーション セキュリティの推奨事項」の推奨事項をすべて実践してください。
このチュートリアルでは、サーバーを準備し、レプリケーションを最小の特権で安全に実行できるようにする方法を説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
- レプリケーション用の Windows アカウントを作成する。
- スナップショット フォルダーを準備する。
- ディストリビューションを構成する。
前提条件
このチュートリアルは、データベースの基本的な操作は理解しているが、レプリケーション機能についてはあまり詳しくないユーザーを対象としています。
このチュートリアルを実行するには、SQL Server、SQL Server Management Studio (SSMS)、および AdventureWorks データベースが必要です。
パブリッシャー サーバー側 (レプリケーション元) に以下をインストールします。
SQL Server Express または SQL Server Compact を除く、SQL Server の任意のエディション。 これらのエディションをレプリケーションパブリッシャーにすることはできません。
AdventureWorks2022
サンプル データベース。 セキュリティを強化するために、サンプル データベースは既定ではインストールされません。
サブスクライバー サーバー (レプリケーション先) に、SQL Server Compact を除く SQL Server の任意のエディションをインストールします。 SQL Server Compact をトランザクション レプリケーションのサブスクライバーにすることはできません。
SQL Server Management Studio をインストールします。
SQL Server Developer エディション をインストールします。AdventureWorks サンプル データベースをダウンロードします。 SSMS でデータベースを復元する手順については、「 SSMS を使用したデータベース バックアップのリストアを参照してください。
Note
レプリケーションは、2 つ以上のバージョンが異なっている SQL Server インスタンスではサポートされていません。 詳細については、「 Replication の下位互換性を参照してください。
SQL Server Management Studio では、固定サーバー ロール sysadmin のメンバーとしてログインし、パブリッシャーとサブスクライバーに接続する必要があります。 このロールの詳細については、「サーバー レベルのロール」を参照してください。
このチュートリアルの推定所要時間: 30 分
レプリケーション用の Windows アカウントの作成
このセクションでは、レプリケーション エージェントを実行するための Windows アカウントを作成します。 また、次のエージェントを実行するための別の Windows アカウントをローカル サーバー上に作成します。
エージェント | 場所 | アカウント名 |
---|---|---|
スナップショット エージェント | 発行元 | <machine_name>\repl_snapshot |
ログ リーダー エージェント (Log Reader Agent) | 発行元 | <machine_name>\repl_logreader |
ディストリビューション エージェント | パブリッシャーおよびサブスクライバー | <machine_name>\repl_distribution |
[マージ エージェント] | パブリッシャーおよびサブスクライバー | <machine_name>\repl_merge |
Note
このレプリケーション チュートリアルでは、パブリッシャーとディストリビューターで同じ SQL Server のインスタンス (NODE1\SQL2016) を共有します。 サブスクライバー インスタンス (NODE2 \ SQL2016) はリモートです。 パブリッシャーとサブスクライバーは SQL Server の同じインスタンスを共有する場合がありますが、これは要件ではありません。 パブリッシャーとサブスクライバーが同じインスタンスを共有する場合、サブスクライバーでアカウントを作成するために使用される手順は必要ありません。
パブリッシャー側でレプリケーション エージェントを実行するためのローカル Windows アカウントを作成する
パブリッシャー側で、[コントロール パネル] の [管理ツール] から [コンピューターの管理] を開きます。
[システム ツール]の [ローカル ユーザーとグループ]を展開します。
[ユーザー] を右クリックし、 [新しいユーザー] を選択します。
[ユーザー名] ボックスに「repl_snapshot」と入力し、パスワードおよびその他の必要な情報を入力し、[作成] を選択して repl_snapshot アカウントを作成します。
同様に、repl_logreader、repl_distribution、repl_merge の各アカウントを作成します。
[閉じる] を選択します。
サブスクライバー側でレプリケーション エージェントを実行するためのローカル Windows アカウントを作成する
サブスクライバー側で、[コントロール パネル] の [管理ツール] から [コンピューターの管理] を開きます。
[システム ツール]の [ローカル ユーザーとグループ]を展開します。
[ユーザー] を右クリックし、 [新しいユーザー] を選択します。
[ユーザー名] ボックスに「 repl_distribution 」と入力し、パスワードおよびその他の必要な情報を入力し、 [作成] を選択して repl_distribution アカウントを作成します。
同様にして、repl_merge アカウントも作成します。
[閉じる] を選択します。
詳細については、「 Replication Agents の概要」を参照してください。
スナップショット フォルダーの準備
このセクションでは、パブリケーション スナップショットの作成と保存に使用されるスナップショット フォルダーを構成します。
スナップショット フォルダーの共有を作成し、アクセス許可を与える
エクスプローラーで SQL Server のデータ フォルダーを参照します。 既定の場所は、C:\Program Files\Microsoft SQL Server\MSSQL.X\MSSQL\Data です。
repldataという名前の新しいフォルダーを作成します。
フォルダーを右クリックし、[プロパティ] を選択します。
[repldata のプロパティ] ダイアログ ボックスの [共有] タブで、[詳細な共有] を選択します。
[詳細な共有] ダイアログ ボックスで、[このフォルダーを共有する] を選択し、[アクセス許可] を選択します。
[repldata のアクセス許可] ダイアログ ボックスで [追加] を選択します。 [ユーザー、コンピューター、サービス アカウントまたはグループの選択] ボックスに、前に作成したスナップショット エージェント アカウントの名前 (<Publisher_Machine_Name>\repl_snapshot) を入力します。 [名前の確認] を選択し、[OK] を選択します。
手順 6 を繰り返して、以前に作成したその他の 2 つのアカウント (<Publisher_Machine_Name>\repl_merge と <Publisher_Machine_Name>\repl_distribution) を追加します。
3 つのアカウントを追加したら、次のアクセス許可を割り当てます。
- repl_distribution: 読み取り
- repl_merge: 読み取り
- repl_snapshot: フル コントロール
共有のアクセス許可が正しく構成されたら、[OK] を選択して、[repldata のアクセス許可] ダイアログ ボックスを閉じます。 [OK] を選択して [詳細な共有] ダイアログ ボックスを閉じます。
[repldata のプロパティ] ダイアログ ボックスで、[セキュリティ] タブを選択し、[編集] を選択します。
[repldata のアクセス許可] ダイアログ ボックスで [追加] を選択します。 [ユーザー、コンピューター、サービス アカウントまたはグループの選択] ボックスに、前に作成したスナップショット エージェント アカウントの名前 (<Publisher_Machine_Name>\repl_snapshot) を入力します。 [名前の確認] を選択し、[OK] を選択します。
同様に、ディストリビューション エージェント (<Publisher_Machine_Name>\repl_distribution) とマージ エージェント (<Publisher_Machine_Name>\repl_merge) のアクセス許可を追加します。
次のアクセス許可が与えられていることを確認します。
- repl_distribution: 読み取り
- repl_merge: 読み取り
- repl_snapshot: フル コントロール
[共有] タブをもう一度選択し、共有の [ネットワーク パス] をメモします。 このパスは、後でスナップショット フォルダーを構成するときに必要になります。
[OK] を選択して [repldata のプロパティ] ダイアログ ボックスを閉じます。
詳細については、「Secure the Snapshot Folder」(スナップショット フォルダーのセキュリティ保護) をご覧ください。
ディストリビューションを構成する
このセクションでは、パブリッシャー側のディストリビューションを構成し、パブリケーション データベースとディストリビューション データベースに対して必要なアクセス許可を設定します。 ディストリビューターを既に構成している場合は、このセクションを開始する前に、発行と配布を無効にする必要があります。 特に運用環境で既存のレプリケーション トポロジを保持する必要がある場合は、発行と配布を無効にしないでください。
パブリッシャー側のリモート ディストリビューターの構成は、このチュートリアルの対象外です。
パブリッシャー側でディストリビューションを構成する
SQL Server Management Studio でパブリッシャーに接続し、サーバー ノードを展開します。
[レプリケーション] フォルダーを右クリックし、 [ディストリビューションの構成] を選択します。
実際のサーバー名ではなく localhost を使用して SQL Server に接続する場合は、SQL Server が localhost または IP アドレスに接続できないことを示す警告が表示されます。 警告ダイアログで [OK] を選択します。 [サーバーへの接続] ダイアログ ボックスで、[サーバー名] を localhost または IP アドレスから使用しているサーバーの名前に変更します。 次に、 [接続](Connect) を選択します。
現在、SQL Server Management Studio (SSMS) 18.0 (以降) では、IP アドレスを使用してディストリビューターに接続するときに警告メッセージ 表示されません まだ無効な既知の問題があります。 ディストリビューターに接続するときは、実際のサーバー名を使用する必要があります。
Note
サーバー名は、既定のインスタンスの
<Hostname>,<PortNumber>
として指定することも、名前付きインスタンスの<Hostname>\<InstanceName>,<PortNumber>
として指定することもできます。 SQL Server がカスタム ポートを使用して Linux または Windows にデプロイされ、ブラウザー サービスが無効になっている場合に、接続のポート番号を指定します。 リモート ディストリビューターのカスタム ポート番号の使用は、SQL Server 2019 (15.x) 以降のバージョンに適用されます。ディストリビューション構成ウィザードが起動します。
[ディストリビューター] ページで、[<'ServerName'> を独自のディストリビューターとする (SQL Server はディストリビューション データベースとログを作成します)] を選択します。 [次へ] を選択します。
SQL Server エージェントが実行されていない場合は、SQL Server Agent Start ページで Yes を選択し、SQL Server エージェント サービスを自動的に開始するように構成します。 [次へ] を選択します。
[スナップショット フォルダー] ボックスにパスとして「\\<Publisher_Machine_Name>\repldata」を入力し、[次へ] を選択します。 このパスは、共有のプロパティを構成した後に repldata のプロパティ フォルダーの [ネットワーク パス] に以前表示されていたパスと一致する必要があります。
ウィザードの残りのページでは、既定値をそのまま使用します。
[完了] をクリックしてディストリビューションを有効にします。
ディストリビューターを構成するときに次のエラーが表示される可能性があります。 これは、SQL Server エージェント アカウントの起動に使用されたアカウントがシステムの管理者ではないことを示しています。 SQL Server エージェントを手動で開始するか、既存のアカウントにアクセス許可を付与するか、SQL Server エージェントが使用しているアカウントを変更する必要があります。
SQL Server Management Studio インスタンスが管理者権限で実行されている場合は、SSMS 内から手動で SQL エージェントを起動できます。
Note
SQL エージェントが自動的に起動しない場合は、SSMS で SQL Server エージェントを右クリックし、[更新] を選択します。 それでも停止状態である場合、SQL Server 構成マネージャーから手動で起動します。
データベースのアクセス許可を設定する
SQL Server Management Studio で、[セキュリティ] を展開し、[ログイン] を右クリックして、[新しいログイン] を選択します。
[全般] ページで、[検索] を選択します。 [選択するオブジェクト名を入力してください] ボックスに「<Publisher_Machine_Name>\repl_snapshot」と入力し、[名前の確認] 、[OK] を順に選択します。
[このログインにマップされたユーザー] の一覧にある [ユーザー マッピング] ページで、ディストリビューション データベースと
AdventureWorks2022
データベースの両方を選択します。[データベース ロールのメンバーシップ] の一覧で、両方のデータベースのログイン用に db_owner ロールを選択します。
[OK] を選択して、ログインを作成します。
その他のローカル アカウント (repl_distribution、repl_logreader、および repl_merge) のログインを作成するために手順 1 ~ 4 を繰り返します。 これらのログインも、ディストリビューション データベースと AdventureWorks データベースの固定データベース ロール db_owner のメンバーとなっているユーザーにマップする必要があります。
詳細については、「 ディストリビューションの構成 および Replication Agent のセキュリティ モデルを参照してください。