孤立ユーザーのトラブルシューティング (SQL Server)
Microsoft SQL Server のインスタンスにログインするには、プリンシパルに有効なSQL Serverログインが必要です。 このログインは、プリンシパルが SQL Server のインスタンスへの接続を許可されているかどうかを確認する認証プロセスで使用されます。 サーバー インスタンスのSQL Server ログインは、sys.server_principals カタログ ビューと sys.syslogins 互換性ビューに表示されます。
SQL Serverログインは、SQL Server ログインにマップされたデータベース ユーザーを使用して個々のデータベースにアクセスします。 このルールには次の 2 つの例外があります。
guest アカウント
これは、データベースで有効にすると、データベース ユーザーにマップされていないログインSQL Serverゲスト ユーザーとしてデータベースに入力できるようにするアカウントです。
Microsoft Windows グループのメンバー
Windows ユーザーから作成した SQL Server ログインは、Windows ユーザーが属しているグループがデータベースのユーザーである場合にデータベースにアクセスできます。
データベース ユーザーへの SQL Server ログインのマップに関する情報は、データベース内に格納されます。 これには、データベース ユーザーの名前および対応する SQL Server ログインの SID が含まれます。 データベース内での承認には、このデータベース ユーザーの権限を使用します。
対応するSQL Serverログインが未定義であるか、サーバー インスタンスで正しく定義されていないデータベース ユーザーは、インスタンスにログインできません。 このようなユーザーは、そのサーバー インスタンスのデータベースの 孤立ユーザー と呼ばれます。 対応するSQL Serverログインが削除されると、データベース ユーザーが孤立する可能性があります。 また、データベースユーザーは、データベースが復元された後、またはSQL Serverの別のインスタンスにアタッチされた後に孤立する可能性があります。 孤立状態は、データベース ユーザーが新しいサーバー インスタンスに存在しない SID にマップされると発生する場合があります。
注意
SQL Server ログインは、そのデータベースでゲストが有効になっていない限り、対応するデータベース ユーザーが存在しないデータベースにアクセスできません。 データベース ユーザー アカウントの作成の詳細については、「 CREATE USER (Transact-SQL)」を参照してください。
孤立ユーザーを検出するには
孤立ユーザーを検出するには、次の Transact-SQL ステートメントを実行します。
USE <database_name>;
GO;
sp_change_users_login @Action='Report';
GO;
出力には、現在のデータベース内のユーザーと、SQL Serverログインにリンクされていない対応するセキュリティ識別子 (SID) が一覧表示されます。 詳細については、「 sp_change_users_login (Transact-SQL)」を参照してください。
注意
sp_change_users_loginは、Windows から作成されたSQL Serverログインでは使用できません。
孤立ユーザーを解決するには
孤立ユーザーを解決するには、次の手順を実行します。
次のコマンドは、login_name で<指定されたサーバー ログイン アカウントを、database_user>で<>指定されたデータベース ユーザーと再リンクします。
USE <database_name>; GO sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>'; GO
詳細については、「 sp_change_users_login (Transact-SQL)」を参照してください。
前の手順のコードを実行すると、ユーザーがデータベースにアクセスできるようになります。 ユーザーは、次のように、sp_password> ストアド プロシージャを<使用して、login_name ログイン アカウントのパスワードを変更できます。
USE master GO sp_password @old=NULL, @new='password', @loginame='<login_name>'; GO
重要
ALTER ANY LOGIN 権限を持つログインだけが、他のユーザーのログイン パスワードを変更できます。 ただし、 sysadmin ロール メンバーのパスワードを変更できるのは、 sysadmin ロールのメンバーだけです。
注意
sp_password は、Microsoft Windows アカウントには使用できません。 Windows ネットワーク アカウントを介してSQL Serverのインスタンスに接続するユーザーは Windows によって認証されるため、パスワードは Windows でのみ変更できます。
詳細については、「 sp_password (Transact-SQL)」を参照してください。
参照
CREATE USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)