DCOM設定ガイド
DCOM概要
DCOMは異なるPC間のリモートアクセスを提供するマイクロソフト社の技術です。DCOMを使用することによって、ネットワーク分散型アプリケーションにおけるコードの再利用が可能になります。DCOMは、リモートPCからのアクセス時、クライアントのログオンアカウントを使って正当性を監査するため、適切なセキュリティ設定が必要になります。
DCOMを使用するためには、大きく分けて次の3つの設定が必要です。
(1)DCOMを使用できる状態にする
- 「このコンピュータ上で分散COMを有効にする」をチェックON
(2)外部から接続できる状態にする
- 認証レベル「接続」
- 実行アカウント「対話ユーザ」
- Windowsファイアウォール/ウィルス検知ソフトの例外設定
(3)外部から送受信可能な状態にする
- ユーザアカウントのセキュリティ定義 (起動許可とアクセス許可にEveryone追加)
- ログオンアカウントの正当性確認 (同一アカウント、同一パスワード、ブランクパスワード不可)
基本設定(ワークグループ使用時)
ワークグループでDCOMを使用する場合、下記3点に注意する必要があります。
- サーバーPCとクライアントPCの両方が同一ワークグループに属していること
- 同一のログオンユーザアカウント/同一パスワードでログオンしていること
- ブランクパスワード(パスワードなし)でないこと
【OPCサーバー側PC】
DCOMCNFGを使用して、下記の設定を行います。
(1)マイ コンピュータ」のプロパティ画面で、「既定のプロパティ」画面を開き、「このコンピュータ上で分散COMを有効にする」をチェックします。
(2)「デバイスエクスプローラOPCサーバー」のプロパティを下記のように設定します。
- 認証レベル「接続」
- 実行アカウント「対話ユーザ」
- 起動許可「Everyone追加」
- アクセス許可「Everyone追加」

※ OPCサーバーのインストール直後は「起動ユーザ」になっていますので「対話ユーザ」へ変更が必要です。
※ OPCクライアントがサービスプログラムの場合、システムアカウントによってネットワークログオンが行われるため、
「SYSTEM」を追加する必要があります。「SYSTEM」は「Everyone」には属しません。
※ DCOM設定を変更した場合、PCの再起動が必要になる場合があります。
※ 「起動ユーザ」を選択した場合、同一アカウントでログオンしていなくても、サーバーPCに存在するユーザアカウントあればアクセス可能です。
ただし、OPCサーバーの画面が表示されませんので、設定変更等を行うことはできません。
(3)ウィルス検知ソフトを使用している場合、停止するか、ポートブロックをしないように設定します。
【OPCクライアント側PC】
DCOMCNFGで「マイコンピュータ」のプロパティ画面を開きます。
既定のプロパティタブで、「このコンピュータ上で分散COMを有効にする」をチェックし、「既定の認証レベル」を「接続」に設定します。

※ Windows XP/SP2、Windows Serer 2003以降の場合は、「OSに依存した設定(Windows XP/SP2、Windows Server 2003以降)」の項もご覧ください。
基本設定(ドメイン使用時)
ドメインユーザアカウントをローカルアドミニストレータに設定し、dcomcnfgを開きます。
Everyoneの代わりに「Domain Users」として、前述のワークグループと同じ設定を行います。
OSに依存した設定(Windows XP)
OPCクライアントアプリケーションがXP上で動作するOPCサーバーに対してリモートアクセスを行うと、リモートからのアクセスを許可するようにDCOM設定されてるにも関わらず、アクセスが拒否されることがあります。この現象は、W2Kと比較してXPではリモートからのアクセスに対するセキュリティが強化されていることに起因しています。XPのセキュリティポリシーはリモートからの侵入者をGuestとして監査し、このGuestに対するセキュリティを適切に制御することにより、ローカルコンピュータの資源の安全性を確保しています。XPのデフォルト状態は、Guestがリモートからアクセスすることを禁止しており、外部からOPCサーバーにアクセスすると、ネットワークログオン時のアカウント監査で拒否されます。従って、OPCクライアントからのアクセスを可能にするには、XPのセキュリティ設定をW2Kレベルに緩和する必要があります。
【セキュリティを緩和する方法(リモートからのアクセス者をIDで監査する方法への変更方法)】
OPCサーバー側PCで、管理ツールの「ローカルセキュリティポリシー」を開き、「セキュリティオプション」の「ローカルアカウントの共有とセキュリティモデル」を「クラシック」に変更します。

※Windows XPのデフォルトは、「Guestのみ」に設定されています。
※Windows Vistaのデフォルトは、「クラシック」に設定されています。
※ローカルセキュリティポリシーの変更は即座に反映されますので、PCの再起動は不要です。
OSに依存した設定(Windows XP/SP2、Windows Server 2003以降)
XPではセキュリティがさらに厳しく制御されるようになり、前述の設定に加えて次の設定を行う必要があります。
(1)Windowsファイアウォールがデフォルトで有効になっていますので、DCOM接続を行うには、Windowsファイアウォールを無効に設定するか、例外設定を行う必要があります。

※ DeviceXPlorer.exeとOPCEnum.exeを例外プログラムに指定します。
※ DCOMが使用するTCPポート「135」を例外ポートに登録します。
(2)DCOMCNFGで「デバイスエクスプローラOPCサーバー」のプロパティ画面を開きます。セキュリティタブで「アクセス許可」を編集し、「ANONYMOUS LOGON」の「リモートアクセス」を「許可」に設定します。
OPCクライアント側PCでも同様に、DCOMCNFGで「マイコンピュータ」のプロパティ画面を開き、COMセキュリティタブで「アクセス許可」を編集し、「ANONYMOUS LOGON」の「リモートアクセス」を「許可」に設定します。
※ 「ANONYMOUS LOGON」の「リモートアクセス」が「拒否」に設定されている場合(デフォルト)、OPCクライアントからR/W実行時に
「Advise Connection Point:アクセスが拒否されました」というエラーメッセージが出ることがあります。
(3)「起動許可」の設定ダイアログを開き、「Everyone」の「リモートからの起動」と「リモートからのアクティブ化」を「許可」に設定します。
OSに依存した設定(Windows Vista)
DCOM設定は、WindowsXP/SP2相当の設定で動作します。
リモートPCにインストールが必要なファイル
OPC-DAサーバのインターフェイスは、「OPCカスタムインターフェイス」と呼ばれるCOMのインターフェイス群です。一般的にC++のようなポインタを扱える言語(アプリケーション)はカスタムインターフェイスに直接アクセスできます。逆に、VB6.0やエクセルVBAのようにポインタを扱えない言語は「OPCオートメーションインターフェイス」と呼ばれるラッパーを介して、OPCサーバーにアクセスします。また、VB.NETやC#のように.NETフレームワークで動作するアプリケーションの場合は、COMと.NETの変換処理が必要になるため、「RCW(Runtime Callable Wrapper)」と呼ばれるラッパーを経由します。

ローカルPCやリモートPCにインストールされているOPCサーバーにアクセスする場合、OPC Enumeratorを使って、接続先PCのレジストリ情報を参照してCOMアクセスに必要なProg.IDやCLSIDを取得しています。OPC Enumeratorを使用しない場合は、あらかじめクライアントPCにOPCサーバーのCOM情報をインポートしておく必要があります。
デバイスエクスプローラのOPCクライアント用インストーラは、下記の機能をセットアップします。
OPC Enumerator ・・・ OpcEnum.exe
OPC Proxy / Stub ・・・ OpcProxy.dll, OpcComn_ps.dll
OPC Automation Wrapper ・・・ OpcDaAuto.dll
Runtime Callable Wrapper ・・・ OpcRcw.Da.dll
※ OpcDaAuto.dllは、Ver2.02以降で.NETに対応しています。環境によってはこのファイルが古いバージョンに上書きされていることがあります。
.NETアプリケーションでOPCインターフェイスの動作が不安定になった場合はこのファイルを確認してください。
DXP2007シリーズがセットアップする最新バージョンは「Ver2.02.5.30」です。
当社製OPCテストクライアントが出力するエラーメッセージ例
デバイスエクスプローラに添付しているテストクライアント(カスタムインターフェイス)を使って、DCOM接続を試みた場合に出力される可能性のあるエラーメッセージとその要因を記します。
【Please install the OPC 2.0 Components on XXX】
ログオンアカウントまたはパスワードが不一致の場合に下記ダイアログが表示されます。
【アクセスが拒否されました】
- 対話ユーザに設定しているにも関わらず、ログオンアカウントが不一致の場合
- OPCサーバーPCでローカルセキュリティポリシーの設定が不適切な場合
- DCOMセキュリティが不十分な場合
【RPCサーバを利用できません。】
- OPCサーバー側またはクライアント側で、Windowsファイアウォールに例外登録されていない場合
- ウィルス検知ソフトがポートをブロックしている場合
- OPCクライアント側で「ANONYMOUS LOGON」の「リモートアクセス」が「拒否」に設定されている場合(デフォルト)