データベース ユーザーとオブジェクトを SQL Server リードレプリカと同期する
新しく作成されたリードレプリカには、リードレプリカの作成時にプライマリ DB インスタンスに存在するログイン、カスタムサーバーロール、SQL エージェントジョブ、またはその他のサーバーレベルのオブジェクトが存在することが期待されます。ただし、リードレプリカの作成後にプライマリ DB インスタンスで作成されたサーバーレベルのオブジェクトは自動的にレプリケートされないため、リードレプリカで手動で作成する必要があります。
データベースユーザーは、プライマリ DB インスタンスからリードレプリカに自動的にレプリケートされます。リードレプリカデータベースは読み取り専用モードであるため、データベースユーザーのセキュリティ識別子 (SID) をデータベースで更新することはできません。そのため、リードレプリカに SQL ログインを作成するときは、そのログインの SID がプライマリ DB インスタンスの対応する SQL ログインの SID と一致していることを確認することが不可欠です。SQL ログインの SID を同期しないと、リードレプリカのデータベースにアクセスできなくなります。SQL Server は Active Directory から SID を取得するため、Windows Active Directory (AD) 認証ログインでこの問題は発生しません。
プライマリ DB インスタンスからの SQL ログインをリードレプリカに同期するには
-
プライマリ DB インスタンスに接続します。
-
プライマリ DB インスタンスに新しい SQL ログインを作成します。
USE [master] GO CREATE LOGIN
TestLogin1
WITH PASSWORD = 'REPLACE WITH PASSWORD
';注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
-
データベースに SQL ログイン用の新しいデータベースユーザーを作成します。
USE [
REPLACE WITH YOUR DB NAME
] GO CREATE USERTestLogin1
FOR LOGINTestLogin1
; GO -
プライマリ DB インスタンスで新しく作成された SQL ログインの SID を確認します。
SELECT name, sid FROM sys.server_principals WHERE name =
TestLogin1
; -
リードレプリカに接続します。新しい SQL ログインを作成します。
CREATE LOGIN
TestLogin1
WITH PASSWORD = 'REPLACE WITH PASSWORD
', SID=[REPLACE WITH sid FROM STEP #4
];
または、リードレプリカデータベースにアクセスできる場合は、孤立したユーザーを次のように修正できます。
-
リードレプリカに接続します。
-
データベース内で孤立したユーザーを特定します。
USE [
REPLACE WITH YOUR DB NAME
] GO EXEC sp_change_users_login 'Report'; GO -
孤立したデータベースユーザーに SQL ログインを作成します。
CREATE LOGIN
TestLogin1
WITH PASSWORD = 'REPLACE WITH PASSWORD
', SID=[REPLACE WITH sid FROM STEP #2
];例:
CREATE LOGIN
TestLogin1
WITH PASSWORD = 'TestPa$$word#1
', SID=[0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P
];注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。