web-dev-qa-db-ja.com

データベースの復元時にログインが失われるのを防ぐ

2つのsqlサーバー(v12.0.2000)でデータベースをバックアップおよび復元しています。しかし、.bakファイルを復元するたびに、バックアップされたデータベースで作成したログインは、復元されたログインに存在しなくなったように見えます。 bakファイルにバックアップされることを期待していました。

別のサーバーで簡単に復元するために、ログインをバックアップするための特別な操作はありますか?

一方ではデータベースを復元し、もう一方ではログインを再作成するためのさまざまなスクリプトを維持することができませんでした。

簡単に復元できる一貫したバックアップファイルを作成するにはどうすればよいですか?

3
Koresh

直面している上記の問題は、一般的に孤立したユーザーの場合として知られています。

復元時にSQL認証のログインとデータベースユーザーで一般的に発生するのは、SIDSが同期されず、関係が壊れることです。そのログインを使用してデータベースに接続する前に、この関係を修復する必要があります。SQLServerの観点から、これらのプリンシパルは接続されなくなったためです。

これを修正する方法については、参照できます 孤立したユーザーの修正

または、代わりに SP_help_revlogin を使用することもできます

1)ソースサーバーのマスターに対してsp_help_revloginsを実行し、「ログインの作成」のスクリプトを取得します。

2)DESTINATION SERVERへのバックアップの復元中に、DESTINATION SERVER上のMASTERデータベースに対して「ログインの作成」スクリプトを実行できます。

3)復元が完了したら、EXEC sp_change_users_login 'REPORT' RESTOREDデータベースに対して。

2
KASQLDBA

サーバーログインを使用すると、SQL Serverに接続できます。ログインは[master]データベースに保存されます。各ログインには、16進数のSIDが割り当てられています。 Windows認証ログインは、Active DirectoryからSIDを取得するため、ログインのSIDはネットワーク内のサーバー間で同じです。 SQL認証ログインは、SQL Serverによって生成されたSIDを取得するため、SIDはサーバーごとに異なります。

データベースユーザーは、ログインがデータベースを使用することを許可します。ユーザーはデータベース自体に格納されます。ログイン用にデータベースユーザーが作成されると、SIDがユーザーに渡されます。この共通SIDは、それらの間のマッピングとして機能します。

データベースを別のサーバーにバックアップおよび復元する場合、ユーザーはデータベースを使用しますが、ログインは[マスター]にあるため、ログインしません。 Windows認証ログインはネットワーク内のすべてのSQL Serverで同じSIDを持っているので、復元されたデータベースのデータベースユーザーはログインと同じSIDを見つけ、正しくマッピングします。 SQL認証ログインはサーバー上で異なるSIDを持つため、データベースユーザーは正しくマッピングされません。対応するログインのないそのようなユーザーは、孤立したユーザーと呼ばれます。

ログイン/データベースを正しく移動するには、スクリプトを実行する必要があります。

AlwaysOnについて述べているこのブログを読むことができますが、通常のサーバーにも適用されます。 https://aalamrangi.wordpress.com/2015/02/09/avoid-Orphan-users-in-alwayson/

1
Aalamjeet Rangi