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

[HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法

概要
この資料では、標準ログインと統合ログインをマップする方法について説明します。

先頭に戻る

詳細情報

SQL Server を実行しているサーバーの 1 つから、SQL Server を実行している別のサーバーにデータベースを移動するときに、master データベース内のログインの SID (セキュリティ識別子) とユーザー データベース内のユーザーの SID 間に不一致が発生することがあります。SQL Server 7.0 および SQL Server 2000 では、このような不一致ユーザーをマップするために、デフォルトで、sp_change_users_login システム ストアド プロシージャが提供されています。ただし、sp_change_users_login ストアド プロシージャを使用できるのは、標準の SQL Server ログインをマップする場合のみであり、このようなマッピングは一度に 1 人のユーザーに対して実行する必要があります。sp_change_users_login ストアド プロシージャの詳細については、SQL Server 7.0 Books Online の「sp_change_users_login (T-SQL)」または SQL Server 2000 Books Online の「sp_change_users_login」を参照してください。

SQL Server 7.0 以降では、SID を使用することによって、master データベース内のログインとユーザー データベース内のユーザーとの間のマッピングを管理できます。これらのマッピングは、ユーザー データベース内のログインに関する正しい権限を管理するために必要です。これらのマッピングが失われると、ログインで以下のような権限の問題が発生します。ただし、以下の問題点に限られるわけではありません。
  • SQL Server ログインが新しいサーバーに存在しない場合に、ユーザーがログインを試みると、次のエラー メッセージが表示される場合があります。
    サーバー : メッセージ 18456、レベル 16、状態 1
    ユーザー '%1!' はログインできませんでした。
  • SQL Server ログインが新しいサーバーに存在し、master データベース内の SID とユーザー データベース内の SID が異なる場合は、ユーザーは正常に SQL Server にログインできます。ただし、ユーザーがそのデータベースにアクセスすると、次のエラー メッセージが表示される場合があります。
    サーバー : メッセージ 916、レベル 14、状態 1、行 1
    サーバー ユーザー '%.*ls' は、データベース '%.*ls' では有効なユーザーではありません。
SQL Server 7.0 セキュリティ モデルの詳細については、ホワイト ペーパー『SQL Server 7.0のセキュリティ』を参照してください。このホワイト ペーパーを参照するには、次のマイクロソフト Web サイトにアクセスしてください。SQL Server 2000 セキュリティ モデルの詳細については、ホワイト ペーパー『Microsoft SQL Server 2000 SP3 セキュリティ機能と推奨事例』を参照してください。このホワイト ペーパーを参照するには、次のマイクロソフト Web サイトにアクセスしてください。
先頭に戻る

制約

  • オブジェクトを所有するコンピュータ名またはドメイン名のプレフィックスが付けられていないユーザーが sysusers テーブル内に存在する場合に、アプリケーションで 2 つの部分で構成される名前 username.objectname を使用してこのようなオブジェクトが参照されると、sp_sidmap ストアド プロシージャによって、sysxlogins テーブルに示されるようにコンピュータ名またはドメイン名がプレフィックスとして付けられて、ユーザー名が変更されるため、そのアプリケーションが機能しなくなることがあります。この問題を回避するには、sp_sidmap ストアド プロシージャが完了した後に、sysusers テーブル内で影響を受けたユーザーの名前を元の名前に変更するか、プライマリ サポート プロバイダに連絡してください。
  • この資料では別名は考慮されていないため、別名は手動で管理する必要があります。
  • 標準 SQL Server ログインが新しい SQL Server サーバーに存在しない場合は、NULL パスワードを持つログインを追加できます。必要に応じて、このようなログインのパスワードを変更してください。
  • sysxlogins テーブルに示されている名前と異なる名前でユーザー データベースにユーザーが作成された場合は、そのユーザーに対応するログインを認識することはできません。そのため、sp_sidmap ストアド プロシージャを実行する前に、以下の操作を行います。
    1. このユーザーが所有するオブジェクトをすべて予備のデータベースに転送します。
    2. 該当するユーザーを削除し、適切な名前でユーザーを追加した後、このユーザーのオブジェクトをすべて転送して戻します。
  • ユーザーが対応するログインを持たず、かつ、ローカル コンピュータ名またはドメイン名のいずれかのプレフィックスが付けられていない場合、このユーザーに関するメッセージが表示されます。このメッセージには、そのユーザーを Windows レベルで追加した後に、そのユーザーをログインとして SQL Server に追加する必要があることが示されます。この操作を行った後、sp_sidmap ストアド プロシージャを再度実行する必要があります。
  • ドメイン名またはローカル Windows サーバー名のいずれかのプレフィックスがユーザーに付けられていて、対応するログインが sysxlogins テーブルに存在しない場合は、ストアド プロシージャがこのユーザーを新しいログインとして SQL Server に追加しようとします。Windows ユーザーが存在しない場合は、結果ウィンドウに出力メッセージが生成されるため、Windows ユーザーを追加した後に、手動でログインを作成します。
  • sysusers テーブル内の 1 人のユーザーに対して複数のログインが存在する場合、結果ファイルの出力メッセージを確認すると、同じユーザー名のログインがすべて出力されています。この時点で、そのユーザーに対応するログインが 1 つになるように、手動で調整する必要があります。



    sysusers テーブルにユーザー名 "johndoe" が存在し、sysxlogins テーブルに "Test\johndoe" と "Test2\johndoe" のような名前のユーザーが存在する場合に、ストアド プロシージャを実行すると、1 人のユーザーに対応するログインが複数あることを示すメッセージが表示されます。システム管理者はどちらか 1 つを選択する必要があります。この場合のみ、この資料に記載されている 2 つ目のストアド プロシージャ sp_prefix_sysusersname を実行する必要があります。また、この状況の詳細は Readme.txt ファイルに記載されています。
先頭に戻る

標準ログインと統合ログインのマッピング

SQL Server を実行しているサーバーの 1 つから、SQL Server を実行している別のサーバーにデータベースを移動した後、ユーザー操作を最小限に抑えるために、以下の手順を実行します。
  1. データベースの sysusers テーブルのユーザーごとに、master データベースの sysxlogins テーブルにログインが存在することを確認します。

    : 標準 SQL Server ログインを追加するには、SQL Server Books Online の「sp_addlogin」を参照してください。統合 SQL Server ログインを追加するには、SQL Server Books Online の「sp_grantlogin」を参照してください。
  2. MapSids.exe ファイルをダウンロードして、Sp_sidmap.sql ファイルと Readme.txt ファイルを展開します。
  3. SQL Server を実行しているサーバーにシステム管理者としてログインし、ユーザー データベースで Sp_sidmap.sql ファイルを実行します。Sp_sidmap.sql ファイルを実行することにより、sp_sidmap と sp_prefix_sysusersname の 2 つのストアド プロシージャが作成されます。
  4. ストアド プロシージャを実行しているユーザー以外にどのユーザーもデータベースにアクセスしていないことを確認します。
  5. クエリ アナライザの結果の表示形式が、グリッド形式ではなく、テキスト形式であることを確認します。これを行うには、Ctrl キーを押しながら T キーを押すか、[クエリ] メニューの [結果をテキストで表示] をクリックします。この操作は重要です。この操作により、結果と情報メッセージを 1 つのウィンドウに表示でき、その出力をテキスト ファイルに保存できます。マッピングの一部を解決するために、このファイルを後で使用する必要があることがあります。
  6. パラメータが適切に渡されることを確認する方法はないため、次のように sp_sidmap ストアド プロシージャに正しくパラメータを渡すようにします。
    EXEC sp_SidMap @old_domain = old_domain_name,@new_domain = new_domain_name,@old_server = old_server_name,@new_server = new_server_name
    新旧のドメイン名とサーバー名を適切な値に置き換えてください。
  7. 結果をファイルに保存し、Readme.txt ファイルの指示に従います。

    : これらのストアド プロシージャを実行したときに、データベース内で変更されるテーブルは sysusers テーブルのみです。データベースを実行時の状態に戻すには、バックアップからデータベースを復元するか、データベースを再アタッチします。
先頭に戻る
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
274188 PRB: "Troubleshooting Orphaned Users" Topic in Books Online is Incomplete
274188 [SQL]PRB: 対応するログインの存在しないユーザー
246133 HOW TO: Transfer Logins and Passwords Between Instances of SQL Server
246133 [INF] SQL Server 7.0 または SQL Server 2000 サーバー間でログインおよびパスワードを転送する
168001 PRB: User Logon and/or Permission Errors After Restoring Dump
168001 [SQL]PRB: リストア後のユーザーログイン、権限エラー
298897 SAMPLE: Mapsids.exe Helps Map SIDs Between User and Master Databases
先頭に戻る
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 240872 (最終更新日 2003-08-06) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:240872 - 最終更新日: 05/15/2011 14:16:00 - リビジョン: 5.0

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 64-bit Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition

  • kbsqlmanagementtools kbdownload kbhowto kbhowtomaster KB240872
フィードバック