次の方法で共有


孤立ユーザーのトラブルシューティング (SQL Server)

Microsoft SQL Server のインスタンスにログインするには、プリンシパルに有効な SQL Server ログインが必要です。 このログインは、プリンシパルが SQL Server のインスタンスへの接続を許可されているかどうかを確認する認証プロセスで使用されます。 サーバー インスタンス上の SQL Server ログインは、 sys.server_principals カタログ ビューと sys.syslogins 互換性ビューに表示されます。

SQL Server ログインは、SQL Server ログインにマップされたデータベース ユーザーを使用して個々のデータベースにアクセスします。 この規則には 2 つの例外があります。

  • ゲスト アカウント。

    これは、データベースで有効にすると、データベース ユーザーにマップされていない 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 ログインでは使用できません。

孤立したユーザーを解決するには

孤立したユーザーを解決するには、次の手順に従います。

  1. 次のコマンドは、<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)」を参照してください。

  2. 前の手順でコードを実行すると、ユーザーはデータベースにアクセスできます。 ユーザーは、次のように、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)」を参照してください。

こちらもご覧ください

ユーザーを作成 (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)