回答:
問題は、復元により元のサーバーインスタンスからdbユーザーが戻されることですが、通常、新しいインスタンスはそれらのユーザーログインを認識しません。データベースレベルのセキュリティの下に表示されますが、対応するサーバーレベルのログインはありません。
データベースを復元したインスタンスのサーバーログインでデータベースユーザーを再接続する必要があります。
それを行うにはいくつかの方法があります。
新しいインスタンスでそれらの新しいログインを作成します。次に、新しいインスタンスのデータベースユーザーとしてそれらを削除し、新しいログインを追加する必要があります。同じログイン名を作成できることを考えると、これは奇妙に思えますが、SID(セキュリティ識別子)は異なるため、SQLがユーザー識別に使用します。これは、1つまたは2つのログインに十分簡単です。
インスタンス間で同じユーザーを維持し、同じSIDを維持する場合は、sp_help_revloginストアドプロシージャを使用します。必要なストアドプロシージャを作成するリンクからコードをコピーし、ユーザーのコピー元のサーバーで実行します。ターゲットサーバーで実行できるSQLスクリプトを生成し、SID、パスワード、その他すべてを引き継ぐ同じユーザーを作成します。これは、ターゲットインスタンスに再接続する必要のあるデータベースユーザーが多い場合、またはソースインスタンス上の1つ以上のSQLログインへのパスワードがわからない場合に使用する方法です。
私は常に「Update_One」アクションを指定してsp_change_users_loginコマンドを実行し、データベースユーザーをサーバーログインに再リンクします。
sp_change_users_login 'Update_One', 'database user', 'server login
'
SQL Server 2012の時点で、既存のユーザーを新しいログインに割り当てるT-SQLコマンドがあります。ログインを作成しますが、ユーザーマッピングは試行しません(失敗します)。次に実行します:
use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;
これにより、既存のログインが新しいユーザーにマップされます。SQLドキュメントはこちら:https : //docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view= sql- server-2017
EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';
代わりに。:)