web-dev-qa-db-ja.com

ログ配布でセカンダリサーバーにユーザーを作成する

私は本番サーバーにServerAと言い、ServerBへのログ配布をセットアップしました。これは読み取り専用モードのままです。このログ配布の目的は、一部の高額なクエリ(痛みを伴うレポート)に対する運用サーバーの負荷を軽減することです。

ここで、ドメインアカウントを使用してログインを作成する必要がある場合。セカンダリデータベースがstandby modeにあるため、これを行うことはできません。

これらのログインをプライマリサーバーで作成すると、セカンダリサーバーにコピーされ、そこにログが復元されると思いましたが、そうではありません。

私はこれを回避する方法を見つけるためにオンラインで多くの調査を行いました。このために次のリソースを見つけました。私はこの記事で提案されているすべての方法を試しましたが、どれも機能しないようです。

1) Log Shipping in SQL Server 2008 R2 for set BI on replicated database

2) How to transfer logins and passwords between instances of SQL Server

3) Orphaned Users with Database Mirroring and Log Shipping

誰かが同じ問題を経験しましたか?あなたは何をした?この問題の回避策はありますか?任意の提案任意のポインタをしてください。

7
M.Ali

2つのオプション:

  • ログ配布プライマリサーバーで、必要なアクセス許可を持つ(または1つを作成する)ユーザーをそのデータベースで見つけます。作成した場合、ログ配布はそれを転送します(データベースレベルのオブジェクトであるため)。次に、プライマリサーバーで必要なユーザーのSIDを見つけるには:select sid from sys.database_principals dp where type = 'S' and name = '<<YourUserNameHere>>'。 (SIDは基本的に一意のIDであり、完全に読み取ることはできません)次に、セカンダリサーバーで、指定したSIDでログインを作成します:CREATE LOGIN [<YourLoginNameHere>>] WITH PASSWORD ='<<YourPasswordHere>>', SID = <<the SID from primary server>>。 SIDを指定することにより、そのログインは、ログシップされたデータベースのユーザーと同じSIDを持ちます-その後、そのユーザーにログインできるはずです。
  • ログ配布先にサーバーレベルの権限(sysadminなど)でログインを作成します。これは本当に悪い考えですが、理由はさまざまです(特に、そのサーバーに他のデータベースがある場合)。

ユーザー作成の実例:LogShippingTestというデータベースがあり、Marketingが内容を読み取れるように、ログ配布されたコピーのセカンダリサーバーdb_datareaderにログインを許可します。

プライマリサーバー:

USE [LogShippingTest];
CREATE USER [DataReaderForMarketing] WITHOUT LOGIN;
ALTER ROLE [db_datareader] ADD MEMBER [DataReaderForMarketing];
SELECT sid FROM sys.database_principals dp WHERE type = 'S' AND name = 'DataReaderForMarketing'

SIDが0x70DD0D59ADF3FD4ABB000037826A2888であるとしましょう(作成したばかりですが、そこから移動します)。ここで、ログ配布を強制的に実行するか、それ自体が実行されてユーザーが2次側に存在するようになるまで待ちます。次に、セカンダリで:

USE [master];
CREATE LOGIN [DataReaderForMarketing] WITH 
   PASSWORD = 'ThisIsAVerySecurePassword', 
   SID = 0x70DD0D59ADF3FD4ABB000037826A2888 

これで、セカンダリサーバーにDataReaderForMarketingログインとしてログインし、ログに記録されたセカンダリデータベースにdb_datareaderを配置できるようになります。 (プライマリデータベースユーザーの権限を変更すると、セカンダリに適用するためにログシップされます!)

14
Simon Righarts