現在オフラインです。再接続するためにインターネットの接続を待っています

[SQL]PRB: 対応するログインの存在しないユーザー

この記事は、以前は次の ID で公開されていました: JP274188
BUG #: 58200 (SQLBUG_70)
BUG #: 235230 (SHILOH)
概要
データベースを他のサーバーへ復元した場合、ユーザーに対応するログインが存在しないという問題に遭遇することがあります。SQL Server Books Online トピック「対応するログインの存在しないユーザーに関するトラブルシューティング」は、この問題のトラブルシューティングの完全な手順を述べていません。

この資料では、対応するログインの存在しないユーザーに関するトラブルシューティングをどのように行うのかを解説しています。
詳細
ログインとユーザーという用語は、しばしば交換可能なものとして使われていますが、それらはまったく別のものです。ログインはユーザー認証のために使用され、データベース ユーザー アカウントはデータベースへのアクセス権限の確認のために使用されます。ログインは、セキュリティ識別子 (SID) によってユーザーに関連付けられています。ログインは、SQL Server へのアクセスのために要求されます。あるログインが有効であることを確認するためのプロセスは、「認証 (authentication)」と呼ばれます。このログインは、SQL Server データベース ユーザーに関連付けられていなければなりません。ユーザー アカウントはデータベース内で実行できることを制御するために使用します。もし、データベース内に、特定のログインのためのユーザー アカウントが存在しなかったなら、そのログインを使用しているユーザーは、SQL Server へ接続することができたとしても、データベースにアクセスすることはできません。この状況の唯一の例外は、データベースが "guest" ユーザー アカウントを持っている場合です。ユーザー アカウントに関連付けられていないログインは、guest ユーザーにマップされます。逆の言い方をすれば、データベース ユーザーは存在しているが関連付けられたログインが存在しない場合、そのユーザーは SQL Server にログインすることはできません。

データベースが異なるサーバーへ復元された場合には、そのデータベースはユーザーと権限を含んでいますが、対応するログインやその同じユーザーに関連付けられたログインは存在しません。これは、対応するログインの存在しないユーザー (orphaned users) として知られています。

対応するログインの存在しないユーザーに関するトラブルシューティング

データベースを他のサーバーへ復元した場合、ユーザーに対応するログインが存在しないという問題に遭遇するかもしれません。次のシナリオは、この問題を説明し、それを解決する方法を示しています。
  1. master データベースにログインを追加します。そして、デフォルトデータベースとして Northwind を指定します。
         Use master     go     sp_addlogin 'test', 'password', 'Northwind'
  2. 作成したログインにアクセス権を与えます。
         Use Northwind      go     sp_grantdbaccess 'test'
  3. データベースをバックアップします。
         BACKUP DATABASE Northwind     TO DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
  4. 別の SQL Server へデータベースを復元します。
         RESTORE DATABASE Northwind     FROM DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
    復元されたデータベースは、対応するログインのない test と名づけられたユーザーを含んでいます。
  5. 次のコードを実行して、対応するログインのないユーザーを確認します。
         Use Northwind     go     sp_change_users_login 'report'
    出力は、Northwind データベースの sysusers システムテーブルと master データベースの sysxlogins システムテーブル内のエントリが一致していないすべてのログインを列挙します。

対応するログインの存在しないユーザーに関する問題の解決手順

  1. 上記手順で確認した対応するログインの存在しないユーザーに関して、次のコマンドを実行します。
         Use Northwind     go     sp_change_users_login 'update_one', 'test', 'test'
    これは、サーバー ログイン "test" を Northwind データベース ユーザー "test" に再度関連付けます。sp_change_users_login ストアド プロシージャを "auto_fix" パラメータとともに実行することで、対応するログインの存在しないユーザーすべてを更新することもできます。しかし、これは推奨されません。なぜなら、SQL Server は名前によってログインとユーザーを一致させようとするからです。ほとんどの場合には、これは期待したとおりの結果になります。しかし、誤ったログインがユーザーに関連付けられた場合、ユーザーは不正な権限を持ってしまいます。
  2. 上記手順のコードを実行した後、ユーザーはそのデータベースにアクセスできるようになります。そのユーザは sp_password ストアド プロシージャでパスワードを変更することが可能です。
         Use master      go     sp_password NULL, 'ok', 'test'
    このストアド プロシージャは Microsoft Windows NT セキュリティ アカウントには使用できません。Windows NT ネットワーク アカウントを通して SQL Server へ接続しているユーザーは、Windows NT によって認証されています。そのため、それらのパスワードは Windows NT でのみ変更することができます。

    sysadmin ロールのメンバのみが他のユーザーのログインのパスワードを変更することができます。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 274188 (最終更新日 2001-03-07) をもとに作成したものです。

Troubleshooting Orphaned User
プロパティ

文書番号:274188 - 最終更新日: 03/02/2004 19:17:35 - リビジョン: 3.1

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbcodesnippet kbpending kbprb KB274188
フィードバック