web-dev-qa-db-ja.com

SQL Serverで、既存のユーザーのログインを作成するにはどうすればよいですか?

データベースをあるSQL Serverインスタンスから別のSQL Serverインスタンスに復元しました。データベースにはすでにユーザーが追加されています。ただし、新しいSQL Serverインスタンスのログインはありません。

新しいユーザーの新しいログインを作成する方法を知っていますが、既存のユーザーのログインを作成するにはどうすればよいですか?

17
epotter

問題は、復元によって元のサーバーインスタンスからdbユーザーが返されることですが、新しいインスタンスは通常、これらのユーザーログインを認識しません。それらはdbレベルのSecurityの下に表示されますが、対応するサーバーレベルのログインはありません。

データベースを復元したインスタンスで、サーバーログインを使用してデータベースユーザーを再接続する必要があります。

それに対処する方法はいくつかあります。

  1. 新しいインスタンスでそれらの新しいログインを作成します。次に、それらを新しいインスタンスのデータベースユーザーとして削除し、新しいログインを追加する必要があります。同じログイン名を作成できることを考えると、これは奇妙に見えますが、SID(セキュリティ識別子)が異なり、SQLがユーザー識別に使用するものです。これは、1回または2回のログインで十分簡単です。

  2. インスタンス間で同じユーザーを維持し、同じSIDを維持する場合は、 sp_help_revlogin ストアドプロシージャを使用します。必要なストアドプロシージャを作成するリンクからコードをコピーし、ユーザーをコピーするサーバーで実行します。ターゲットサーバーで実行できるSQLスクリプトを生成し、SID、パスワードなどすべてを引き継ぐ同じユーザーを作成します。これは、ターゲットインスタンスで再接続する必要のあるデータベースユーザーが多数いる場合、またはソースインスタンスの1つ以上のSQLログインへのパスワードがわからない場合に適した方法です。

9
squillman

私は常に sp_change_users_login コマンドを 'Update_One'アクションと共に実行して、データベースユーザーをサーバーログインに再リンクします。

sp_change_users_login 'Update_One', 'database user', 'server login '

11
Aaron Daniels

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

2
erict

これが私が見つけたものです。

Squillmanが期限切れになると、ユーザーはデータベースをコピーしますが、ログインはコピーしません。問題を解決するために使用できるsp_change_users_loginというストア手順があります。これを行うための手順は、 this aritcle で詳しく説明されています。ストア手順の使用の詳細は このページ にあります。

2
epotter