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

データベースの復元後にデータベース上のユーザー ログインと権限が無効になる

この記事は、以前は次の ID で公開されていました: JP168001
現象
古いバージョンの master データベースの再構築または再読み込みを実行した後、SQL Server ユーザー データベースのダンプを他の SQL Server (ホット バックアップ サーバーなど) や同じ SQL Server に復元すると、そのデータベースのユーザー ログインと権限が無効になる場合があります。

この問題により、次のような現象が発生することがあります。
  • 6.x サーバーにログインしているときに、次のエラー メッセージが表示される場合があります。
    メッセージ 4002, レベル 14, 状態 1, サーバー Microsoft SQL Server, 行 0
    ログインに失敗しました。
    DB-Library: ログインが正しくありません。
  • 7.0 サーバーにログインしているときに、次のエラー メッセージが表示される場合があります。
    メッセージ 18456、レベル 14、状態 1
    ユーザー '%ls' はログインできませんでした。
  • ユーザーがデータベース内のオブジェクトにアクセスしようとすると、次のエラー メッセージが表示される場合があります。
    メッセージ 229、レベル 14、状態 1
    %s 権限は、オブジェクト %.*s、データベース %.*s、所有者 %.*s にありません。
  • ログインを作成して復元したデータベースに対するアクセス権を与えるか、そのデータベースにユーザーを追加しようとすると、次のエラー メッセージが表示される場合があります。
    Microsoft SQL-DMO (ODBC SQLState: 42000)
    エラー 15023: ユーザーまたはロール '%s' は現在のデータベースに既に存在します。
  • ユーザーに、以前は権限がなかったオブジェクトに対する権限が与えられる場合があります。
原因
ユーザー ログイン情報は、master データベースの syslogins テーブルに格納されています。サーバーを変更したり、古いバージョンの master データベースを再構築または復元してこの情報を変更したりすると、この情報がユーザー データベースのダンプを作成したときの状態と一致しなくなる場合があります。ユーザー ログインが存在しない場合、そのユーザーがサーバーにログインしようとしたときに、"ログインに失敗しました" というメッセージが表示されます。ユーザー ログインが存在しても、master データベースの syslogins テーブルとユーザー データベースの sysusers テーブルとの間で SUID (6.x) または SID (7.0) の値が異なっている場合、そのユーザーはユーザー データベースで要求されているものとは異なる権限を与えられている可能性があります。

: Microsoft SQL Server 2005 を使用している場合、syslogins テーブルと sysusers テーブルは互換性ビューとして実装されています。これらのビューは、sys.syslogins と sys.sysusers です。互換性ビューの詳細については、SQL Server 2005 Books Online の「互換性ビュー (Transact-SQL)」を参照してください。
回避策
この問題を回避するには、以下のいずれかを実行します。
  • ログイン、ユーザー、および権限を追加するスクリプトを入手できる場合は、スクリプトでそれらを削除して再作成します。スクリプトを使用してサーバー間でログインを転送する方法については、以下の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
    246133 [INF] SQL Server 7.0 または SQL Server 2000 サーバー間でログインおよびパスワードを転送する
    240872 [HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法
  • sp_change_users_login ストアド プロシージャを使用して、syslogins、sysusers、および sysalternates テーブル間のリレーションシップを再度関連付けることができます。ただし、このプロシージャは最適なリンクを判断して作成するため、ユーザーに必要以上のアクセス権を与える場合があります。まず Report オプションを指定してこのプロシージャを実行すると、変更されるユーザーの一覧が生成されます。プロシージャの実行後、変更されたユーザーに適切な権限が割り当てられていることを確認する必要があります。また、バックアップの復元先データベースに異なる順番で作成されたログインとユーザーが原因で発生した権限の問題を sp_change_users_login プロシージャを使用して解決できないことに注意する必要があります。
  • ユーザー データベースを読み込む前に、そのユーザー データベースのダンプを作成した時点の master データベースのダンプをサーバーに復元します。これにより、ユーザー データベースのすべてのユーザー情報が master データベースの syslogins テーブルと正確に一致します。

    警告 : master データベースにはサーバー全体の情報が含まれているため、サーバー上のすべてのデータベースがその影響を受けます。master データベースを復元すると、ユーザー ID やデータベースが失われたり、誤った権限を与えられる場合があります。バックアップの作成後に master データベースに対して加えられた変更はすべて失われます。この方法は、master データベースのバックアップに、問題となっているユーザー データベースとサーバー上の他のすべてのデータベースの正確な情報が含まれていることがわかっている場合にのみ使用してください。
  • Transfer Manager (6.x) または DTS (7.0) を使用してログインをコピーします。この方法ではパスワードが転送されないことに注意してください。
  • 主要なサポート プロバイダに問い合わせてください。
プロパティ

文書番号:168001 - 最終更新日: 08/08/2006 06:29:23 - リビジョン: 5.3

Microsoft SQL Server 6.0 Standard Edition, Microsoft SQL Server 6.5 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition

  • kbprb kbusage KB168001
フィードバック