locked
「実行時エラー70 書き込みができません」 および イベントビューアでソース:DCOM イベントID:10006が発生 RRS feed

  • 質問

  • こんにちわ。

    次のような現象が発生しており、調査しておりますが、行き詰ってしまい当フォーラムに投稿いたします。

     

    『現象』
    クライアントマシン(XP)からDCOMサーバー(2003)に対してDCOMオブジェクトを生成しようとすると、「実行時エラー70 書き込みができません」が発生します。

     

    『詳細』
    クライアントプログラム動かして、呼び出してみると、
    「実行時エラー 70: 書き込みできません」というメッセージが表示します。

    また、呼び出し元(クライアント)イベントビューアに以下のエラーが記録されております。

    --------------------------------------------------------------
    ソース:DCOM
    分類:なし 種類:なし
    イベントID:10006
    サーバー:
    {XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} をアクティブにしようとしたときに コンピュータ {#コンピュータ名#} でエラー "エラー: 一般のアクセスが拒否されました " が発生しました。
    詳細な情報は、​http://go.microsoft.com/fwlink/events.asp​ の [ヘルプとサポート センター] を参照してください。
    ---------------------------------------------------------------

     

    『環境』
    サーバOS:Win2003Server ←DCOMを配置しているサーバー
    クライアントOS:WinXP SP2 ←DCOMオブジェクトを呼び出しているクライアントアプリケーション
    開発言語:VB6(クライアント、サーバー共に)

    ※ファイアーウォール、ウィルスソフトは、現在使用しておりません。

     

    『プログラム』
    ★サーバー側のクラスは以下の感じ(DComSrvTest.Class1)
    Function Sum(ByVal x As Long, ByVal y As Long) As String
    Sum = "てすと!!" + Str(x + y)
    End Function

    ★クライアントの呼びだしはこんな感じにしております。
    Private Sub Command1_Click()
    Dim a As Object
    Set a = CreateObject("DComSrvTest.Class1", "testSrv")
    MsgBox a.Sum(10, 10)
    End Sub

    『行ったことを整理します』
    思考錯誤したことを列挙します。

    ・Dcomcnfgのマイコンピュータのプロパティを開いて、既定のプロパティタブを選択、既定の認証レベルを接続にして、既定の偽装レベルを「識別」、「匿名」、「偽装」の3種類、試してみた。

    ・DcomcnfgのDCOMの構成の中から、DComSrvTest.Class1のプロパティを選択し、セキュリティタブを選択し、アクセス権、起動アクセス権、構成アクセス許可のそれぞれを、既定からカスタマイズに変更し、EveryOneを追加及び許可できるものはすべて許可(フルコントロール)した。

    ・クライアントからサーバーへの接続は、サーバーに用意されているユーザーアカウント(administrator権限を与えている)で、ログインしている状態で行ってみた。

    ・コンピュータの構成\Windows の設定\セキュリティの設定\ローカル ポリシー\セキュリティ オプション
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ アクセス制限
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ起動制限
     のそれぞれに、everyoneを追加。

    上記調査で参考にした文献が以下のとおりです。
    ・イベントビューアに記載されている「ヘルプとサポート センター」

    ・​http://support.microsoft.com/kb/180384/ja

     

    ★『ご質問』★
    経験不足なのか知識不足なのか行き詰っております。
    本件の原因の特定方法、とっかかりなどありましたら、
    アドバイスください。
    上記現象内容から原因が既にわかっている方おりましたら、
    ご教授ください。

    また、少しでも疑わしいこと、気になることなど、思い当たるふしなどありましたら、教えてください。藁をも掴む気持ちです。
    情報お待ちしております m(。 。)m

    2008年6月1日 7:38

回答

  • DCOMの作り方すら知らないので、藁にすらならないかもしれませんが・・・。

     

    イベントログの内容からすると、アクセス権の関係でアクティブ化(リモート)に失敗しているっぽいですね。

    昔、DCOMを使用したパッケージ(BizTalkのMQSeriesアダプタ)をセットアップしていて、同様のエラーに遭遇したことがあります。

    列挙されている試した内容を眺めていると、1つだけコレも試してみては?ってのがあります。

     

    Dcomcnfgのマイコンピュータのプロパティの[COMセキュリティ]タブに[制限の編集]ボタンがあります。

    これのセキュリティを調整してみてください。

     

    昔このエラーで試行錯誤したとき、2種類のセキュリティの組み合わせでアクセス許可を判定している印象を受けました。

    コンピュータごとと、DCOMオブジェクト(こんな表現?専門用語わかんない)ごとのセキュリティです。

    コンピュータごとのは[制限の編集]で。

    DCOMオブジェクトごとのは[規定値の編集]および、[DCOMの構成]ツリーから個別に。

     

    はずれだったらスミマセン。

    確たる情報ソースがあるわけでもないので・・・。

    2008年6月2日 4:40
  • かためろ様

     

    アドバイスありがとうございます。

    -------------------------------------------------------------------------

    [COMのセキュリティ]-【制限の編集】

    ⇒コンピュータ単位、

    [DCOMの構成]-セキュリティ(カスタマイズ時) 又は [COMのセキュリティ]-【既定値の編集】(既定時)

    ⇒DCOMアプリケーション単位

    -------------------------------------------------------------------------

    だったのですね、勉強になりました。

     

    ただ、肝心の[COMセキュリティ]タブを見ると、【制限の編集】がディセーブルになっており、中身が見れません。

    【既定値の編集】はイネーブルになっており、参照&編集可能です。

     

    【制限の編集】がディセーブルになっている時点で何かおかしいのでしょうか?

    何かの設定で、有効・無効に切り替わるのでしょうか?

    わかる方、おりましたら、ご教授ください。

     

    >確たる情報ソースがあるわけでもないので・・・。

    いえいえ、とっかかりになります。助かります。
    2008年6月2日 5:22
  • 追記

     

    >ただ、肝心の[COMセキュリティ]タブを見ると、【制限の編集】がディセーブルになっており、中身が見れません。

    これは、わかりました。

     

    ローカルポリシーでアクセス制限をかけると、マイコンピュータのCOMセキュリティよりも優先されるようです。

    -----------------------------------------------------------------------------------------------------------------------

    ・コンピュータの構成\Windows の設定\セキュリティの設定\ローカル ポリシー\セキュリティ オプション
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ アクセス制限
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ起動制限
     のそれぞれに、everyoneを追加。

    -----------------------------------------------------------------------------------------------------------------------

     

    引き続き、、、

     

    本件の原因の特定方法、とっかかりなどありましたら、アドバイスください。
    上記現象内容から原因が既にわかっている方おりましたら、ご教授ください。

    また、少しでも疑わしいこと、気になることなど、思い当たるふしなどありましたら、教えてください。

    藁をも掴む気持ちです。
    情報お待ちしております m(。 。)m

    2008年6月2日 6:35
  •  obata さんからの引用

    ローカルポリシーでアクセス制限をかけると、マイコンピュータのCOMセキュリティよりも優先されるようです。

    なるほど、そうだったんですね。

    勉強になります。

    実際にローカルポリシーにDCOMのポリシーをエントリーして、[制限の編集]ボタンがロックされることを確認しました。

    DCOMのポリシーが未定義の状態に戻せなくなって焦りましたが、レジストリから該当のを削除することで戻りました。

    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DCOM

     

    それはさておき、サーバーではリモートからの起動・アクティブ化の許可がeveryoneに、クライアントではリモートアクセスの許可がeveryoneに与えられている状況ですよねぇ。

    アクセスが拒否される理由が見当たらないですねぇ・・・。

     

    うーん、権限の前に、単純に認証で拒否られてるってことはないでしょうか?

    クライアントプログラムの実行アカウントでは、サーバーの認証が通らないってことはないでしょうか?

     

    識者が登場してくれると良いのですが・・・。

    2008年6月2日 8:09
  • かためろ様

     

    >うーん、権限の前に、単純に認証で拒否られてるってことはないでしょうか?

    その線も疑っています。

     

    今問題が出ている環境の構成をおさらいします。

     

    サーバー(2003Server)およびクライアント(XP)は、LANで同じセグメントに存在します。

    途中にルータが存在したり、NAT変換など難しいことはしておりません。

    また、ドメインコントローラも用意しておりません。

    お互いに、WORKGROUPに所属しております。

    ・ファイアウォール:お互いに無効にしております。

    ・ウィルスソフト:インストールしてません。

    ・クライアントからサーバーへの接続はAdministrator権限を持っているサーバーのユーザーでログインしております。

     

    こういうドキュメントを見つけました。

    http://support.microsoft.com/kb/827805/ja

     

    ↑上記記事抜粋↑

    ----------------------------------------------------------------------------------------------------------------

    同じドメインで実行されていない 2 台のコンピュータが、通信または分散トランザクションに MSDTC (Microsoft 分散トランザクション コーディネータ) を使用すると、相互認証に失敗することがあります。

    通信しているコンピュータどうしが同じドメインに存在しない場合、MSDTC プロキシにより MSDTC が正しく認証されないことがあります。

    サーバー : メッセージ 7391、レベル 16、状態 1、行 2

    ----------------------------------------------------------------------------------------------------------------

    類似した問題ですが、エラー内容が少し違います。

     

    でも、さらに下記のドキュメントを見ると、それほど遠くない問題にも見えます。

    ↓↓↓2Pのトランザクション マネージャ通信の認証変更 (ワークグループ環境のみ)↓↓↓

    http://www.pca.co.jp/area_before/protaiou/pdf/WindowsSever%202003SP1.pdf

     

    MSDTC 付近調査してみようと思います。

     

    並行して引き続き、情報お待ちしております。

    とっかかり、調べ方、考え方など、なんでも良いです、アドバイスお願いいたします。

    2008年6月2日 14:55
  •  obata さんからの引用

    ・クライアントからサーバーへの接続はAdministrator権限を持っているサーバーのユーザーでログインしております。

    そのユーザーは、クライアントとサーバーの両方にあって、全く同じパスワードですよね?

     

    また、Windows Server 2003にSP1を、XPにSP2を適用するとMSDTC周りのセキュリティが変更されます。
    SPは適用していますか?

     

    あと、ネットワークDTCアクセスが有効になってないとダメかもしれませんね。
    [MSDTC]タブの[セキュリティの構成]ボタンのところです。
    うちの、DCOMアプリが動いてるコンピュータの設定を確認したところ、有効になっていました。
    (昔の自分が設定したのか、インストーラーが設定したのか、もはや覚えておりません)

     

    http://techbank.jp/Community/blogs/kametaro/archive/2008/05/22/768.aspx
    コレ、私めのブログなんですが、MSDTCの設定に関してはもしかしたら参考になるかもしれません・・・。
    BizTalk Serverに偏っていますが、一般的なトラブルにも対応できる内容だと思います。

    2008年6月3日 5:05
  • かためろさま

     

    いつもお世話になっております。

     

    クライアント、サーバーともに、全く同じパスワードです。

    XPはSP2、2003もSP2をあててます。

    [MSDTC]タブの[セキュリティの構成]は、ネットワークDTCアクセスにチェックしております。

     

    ~チェックしている項目一覧~

    リモートクライアント許可

    リモート管理を許可

    受信を許可

    送信を許可

    認証を必要としない

     

    ブログありがとうございます。これから読んでみます。

     

     

    2008年6月3日 8:05
  • かためろさま

     

    いつもお世話になっております。

     

    一点嘘を書きました。

    >クライアント、サーバーともに、全く同じパスワードです。

    もう1台のテストサーバーを用意したところ正常に動作したので、

    本件の現象が出ている環境を、あらためて調べてみたところ、

    クライアントログオン時のパスワードと、サーバーに用意したユーザーのパスワードが違っておりました。

     

    パスワード同じにしたところ、上手くいきました。

     

    いろいろ手伝っていただきありがとうございます。

    勉強不足痛感いたしました。

    2008年6月4日 2:11

すべての返信

  • DCOMの作り方すら知らないので、藁にすらならないかもしれませんが・・・。

     

    イベントログの内容からすると、アクセス権の関係でアクティブ化(リモート)に失敗しているっぽいですね。

    昔、DCOMを使用したパッケージ(BizTalkのMQSeriesアダプタ)をセットアップしていて、同様のエラーに遭遇したことがあります。

    列挙されている試した内容を眺めていると、1つだけコレも試してみては?ってのがあります。

     

    Dcomcnfgのマイコンピュータのプロパティの[COMセキュリティ]タブに[制限の編集]ボタンがあります。

    これのセキュリティを調整してみてください。

     

    昔このエラーで試行錯誤したとき、2種類のセキュリティの組み合わせでアクセス許可を判定している印象を受けました。

    コンピュータごとと、DCOMオブジェクト(こんな表現?専門用語わかんない)ごとのセキュリティです。

    コンピュータごとのは[制限の編集]で。

    DCOMオブジェクトごとのは[規定値の編集]および、[DCOMの構成]ツリーから個別に。

     

    はずれだったらスミマセン。

    確たる情報ソースがあるわけでもないので・・・。

    2008年6月2日 4:40
  • かためろ様

     

    アドバイスありがとうございます。

    -------------------------------------------------------------------------

    [COMのセキュリティ]-【制限の編集】

    ⇒コンピュータ単位、

    [DCOMの構成]-セキュリティ(カスタマイズ時) 又は [COMのセキュリティ]-【既定値の編集】(既定時)

    ⇒DCOMアプリケーション単位

    -------------------------------------------------------------------------

    だったのですね、勉強になりました。

     

    ただ、肝心の[COMセキュリティ]タブを見ると、【制限の編集】がディセーブルになっており、中身が見れません。

    【既定値の編集】はイネーブルになっており、参照&編集可能です。

     

    【制限の編集】がディセーブルになっている時点で何かおかしいのでしょうか?

    何かの設定で、有効・無効に切り替わるのでしょうか?

    わかる方、おりましたら、ご教授ください。

     

    >確たる情報ソースがあるわけでもないので・・・。

    いえいえ、とっかかりになります。助かります。
    2008年6月2日 5:22
  • 追記

     

    >ただ、肝心の[COMセキュリティ]タブを見ると、【制限の編集】がディセーブルになっており、中身が見れません。

    これは、わかりました。

     

    ローカルポリシーでアクセス制限をかけると、マイコンピュータのCOMセキュリティよりも優先されるようです。

    -----------------------------------------------------------------------------------------------------------------------

    ・コンピュータの構成\Windows の設定\セキュリティの設定\ローカル ポリシー\セキュリティ オプション
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ アクセス制限
     DCOM: セキュリティ記述子定義言語 (SDDL) でのコンピュータ起動制限
     のそれぞれに、everyoneを追加。

    -----------------------------------------------------------------------------------------------------------------------

     

    引き続き、、、

     

    本件の原因の特定方法、とっかかりなどありましたら、アドバイスください。
    上記現象内容から原因が既にわかっている方おりましたら、ご教授ください。

    また、少しでも疑わしいこと、気になることなど、思い当たるふしなどありましたら、教えてください。

    藁をも掴む気持ちです。
    情報お待ちしております m(。 。)m

    2008年6月2日 6:35
  •  obata さんからの引用

    ローカルポリシーでアクセス制限をかけると、マイコンピュータのCOMセキュリティよりも優先されるようです。

    なるほど、そうだったんですね。

    勉強になります。

    実際にローカルポリシーにDCOMのポリシーをエントリーして、[制限の編集]ボタンがロックされることを確認しました。

    DCOMのポリシーが未定義の状態に戻せなくなって焦りましたが、レジストリから該当のを削除することで戻りました。

    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DCOM

     

    それはさておき、サーバーではリモートからの起動・アクティブ化の許可がeveryoneに、クライアントではリモートアクセスの許可がeveryoneに与えられている状況ですよねぇ。

    アクセスが拒否される理由が見当たらないですねぇ・・・。

     

    うーん、権限の前に、単純に認証で拒否られてるってことはないでしょうか?

    クライアントプログラムの実行アカウントでは、サーバーの認証が通らないってことはないでしょうか?

     

    識者が登場してくれると良いのですが・・・。

    2008年6月2日 8:09
  • かためろ様

     

    >うーん、権限の前に、単純に認証で拒否られてるってことはないでしょうか?

    その線も疑っています。

     

    今問題が出ている環境の構成をおさらいします。

     

    サーバー(2003Server)およびクライアント(XP)は、LANで同じセグメントに存在します。

    途中にルータが存在したり、NAT変換など難しいことはしておりません。

    また、ドメインコントローラも用意しておりません。

    お互いに、WORKGROUPに所属しております。

    ・ファイアウォール:お互いに無効にしております。

    ・ウィルスソフト:インストールしてません。

    ・クライアントからサーバーへの接続はAdministrator権限を持っているサーバーのユーザーでログインしております。

     

    こういうドキュメントを見つけました。

    http://support.microsoft.com/kb/827805/ja

     

    ↑上記記事抜粋↑

    ----------------------------------------------------------------------------------------------------------------

    同じドメインで実行されていない 2 台のコンピュータが、通信または分散トランザクションに MSDTC (Microsoft 分散トランザクション コーディネータ) を使用すると、相互認証に失敗することがあります。

    通信しているコンピュータどうしが同じドメインに存在しない場合、MSDTC プロキシにより MSDTC が正しく認証されないことがあります。

    サーバー : メッセージ 7391、レベル 16、状態 1、行 2

    ----------------------------------------------------------------------------------------------------------------

    類似した問題ですが、エラー内容が少し違います。

     

    でも、さらに下記のドキュメントを見ると、それほど遠くない問題にも見えます。

    ↓↓↓2Pのトランザクション マネージャ通信の認証変更 (ワークグループ環境のみ)↓↓↓

    http://www.pca.co.jp/area_before/protaiou/pdf/WindowsSever%202003SP1.pdf

     

    MSDTC 付近調査してみようと思います。

     

    並行して引き続き、情報お待ちしております。

    とっかかり、調べ方、考え方など、なんでも良いです、アドバイスお願いいたします。

    2008年6月2日 14:55
  •  obata さんからの引用

    ・クライアントからサーバーへの接続はAdministrator権限を持っているサーバーのユーザーでログインしております。

    そのユーザーは、クライアントとサーバーの両方にあって、全く同じパスワードですよね?

     

    また、Windows Server 2003にSP1を、XPにSP2を適用するとMSDTC周りのセキュリティが変更されます。
    SPは適用していますか?

     

    あと、ネットワークDTCアクセスが有効になってないとダメかもしれませんね。
    [MSDTC]タブの[セキュリティの構成]ボタンのところです。
    うちの、DCOMアプリが動いてるコンピュータの設定を確認したところ、有効になっていました。
    (昔の自分が設定したのか、インストーラーが設定したのか、もはや覚えておりません)

     

    http://techbank.jp/Community/blogs/kametaro/archive/2008/05/22/768.aspx
    コレ、私めのブログなんですが、MSDTCの設定に関してはもしかしたら参考になるかもしれません・・・。
    BizTalk Serverに偏っていますが、一般的なトラブルにも対応できる内容だと思います。

    2008年6月3日 5:05
  • かためろさま

     

    いつもお世話になっております。

     

    クライアント、サーバーともに、全く同じパスワードです。

    XPはSP2、2003もSP2をあててます。

    [MSDTC]タブの[セキュリティの構成]は、ネットワークDTCアクセスにチェックしております。

     

    ~チェックしている項目一覧~

    リモートクライアント許可

    リモート管理を許可

    受信を許可

    送信を許可

    認証を必要としない

     

    ブログありがとうございます。これから読んでみます。

     

     

    2008年6月3日 8:05
  • かためろさま

     

    いつもお世話になっております。

     

    一点嘘を書きました。

    >クライアント、サーバーともに、全く同じパスワードです。

    もう1台のテストサーバーを用意したところ正常に動作したので、

    本件の現象が出ている環境を、あらためて調べてみたところ、

    クライアントログオン時のパスワードと、サーバーに用意したユーザーのパスワードが違っておりました。

     

    パスワード同じにしたところ、上手くいきました。

     

    いろいろ手伝っていただきありがとうございます。

    勉強不足痛感いたしました。

    2008年6月4日 2:11