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


17

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

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

回答:


9

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

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

それを行うにはいくつかの方法があります。

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

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


10

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

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


かっこいい:EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';代わりに。:)
user2173353

これは、データベースユーザーとサーバーログインの両方を持っているが、それらの間のリンクが壊れている場合にのみ可能ですか?
wenzzzel

2

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

squillmanが説明したように、ユーザーはデータベースにコピーされますが、ログインはコピーされません。問題を解決するために使用できるsp_change_users_loginと呼ばれるストアプロシージャがあります。そのための手順は、この項目で詳しく説明されています。ストアプロシージャの使用の詳細については、このページを参照てください


2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.