対応するログインの存在しないユーザーに関するトラブルシューティング
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 ログインは、データベースで guest が有効になっている場合を除いて、対応するデータベース ユーザーがないデータベースにはアクセスできません。データベース ユーザー アカウントの作成については、「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)」を参照してください。