コンピュータが同じドメインで実行されていない場合に MSDTC による相互認証が失敗する

Support for Windows Server 2003 ended on July 14, 2015

Microsoft ended support for Windows Server 2003 on July 14, 2015. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
現象
同じドメインで実行されていない 2 台のコンピュータが、通信または分散トランザクションに MSDTC (Microsoft 分散トランザクション コーディネータ) を使用すると、相互認証に失敗することがあります。

Microsoft Windows Server 2003 Enterprise Edition を実行しているコンピュータで、Microsoft SQL Server 2000 のリンク サーバーに対して分散トランザクションを実行すると、次のエラー メッセージが表示されることがあります。
サーバー : メッセージ 7391、レベル 16、状態 1、行 2
OLE DB プロバイダ 'SQLOLEDB' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。[OLE/DB provider returned message: 指定されたトランザクション コーディネータに、新規トランザクションを参加できませんでした。]
原因
通信しているコンピュータどうしが同じドメインに存在しない場合、MSDTC プロキシにより MSDTC が正しく認証されないことがあります。
回避策
警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。

レジストリの編集方法の詳細については、レジストリ エディタ (Regedit.exe) のヘルプの「キーおよび値を変更する」、または Regedt32.exe のヘルプの「レジストリ情報の追加と削除」と「レジストリを編集する」を参照してください。編集する前にレジストリのバックアップを行うようにしてください。

この問題を解決するには、Windows Server 2003 コンピュータで RPC セキュリティを無効にします。RPC セキュリティは、Windows Server 2003 の新しい DTC 機能です。RPC セキュリティを無効にすると、RPC 呼び出しに関する DTC 認証のセキュリティ レベルが Microsoft Windows 2000 Server で使用可能なレベルに戻ります。これを行うには、以下の手順を実行して、TurnOffRpcSecurity レジストリ値の DWORD 値を 1 に設定します。
  1. レジストリ エディタ (Regedt32.exe) を起動します。
  2. 次のレジストリ キーを見つけます。
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
  3. [編集] メニューの [新規] をポイントして [DWORD 値] をクリックし、次のレジストリの値を追加します。
    値の名前データ型
    TurnOffRpcSecurityREG_DWORD1
  4. レジストリ エディタを終了します。
:Windows Server 2003 Service Pack 1 のインストール後、レジストリ エントリ TurnOffRpcSecurity は 0 に設定されます。コンピュータを再起動する前に、レジストリ エディタを使用して、値を 1 に戻す必要があります。
状況
この動作は仕様です。
詳細

現象の再現手順

  1. 両方のコンピュータが Windows Server 2003 を実行していることを確認します。
  2. Service Pack 3 (SP3) が適用された SQL Server 2000 を両方のコンピュータにインストールします。
  3. MSDTC が両方のコンピュータで開始されていることを確認します。
  4. 1 台目のコンピュータで、SQL クエリ アナライザ (Isqlw.exe) ユーティリティを起動し、ローカルの SQL Server に接続します。
  5. 2 台目のコンピュータをリンク サーバーとして追加します。これを行うには、SQL クエリ アナライザで次の Transact-SQL ステートメントを実行します。
    EXEC sp_addlinkedserver  'remote_server',  N'SQL SERVER'GO
    : 上記ステートメントの remote_server は 2 台目のコンピュータの名前に置き換えます。
  6. SQL クエリ アナライザで次の Transact-SQL ステートメントを実行します。
    SET xact_abort ON GOUSE  pubsGOBEGIN DISTRIBUTED TRANSACTIONSELECT  *  FROM remote_server.pubs.dbo.authorsCOMMIT TRANGO
    この資料の「現象」に記載されているエラー メッセージが表示されることがあります。
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
329332 リンク サーバーに対して分散トランザクションを実行するとエラー 7391 が表示される
Microsoft COM+ 1.5 の詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
プロパティ

文書番号:827805 - 最終更新日: 12/05/2007 09:36:33 - リビジョン: 4.4

Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft SQL Server 2000 Enterprise Edition, Microsoft COM+ 1.5

  • kbinfo kbtshoot kbtransaction kbsecurity kbrpc kbauthentication kbdtc kbdomain KB827805
フィードバック