ライセンス認証のセキュリティをオフにする
通常、アクティブ化では既定のセキュリティ設定が使用されます。 ただし、アクティブ化機能に渡される CO SERVERINFO 構造体のメンバーである COAUTHINFO 構造体を指定することで、アクティブ化セキュリティーを制御できます。 クライアントが COAUTHINFO 構造体でRPC_C_AUTHN_LEVEL_NONEの認証レベルを指定した場合、認証は試行されません。 それ以外の場合は、セキュリティで保護されたアクティブ化が試行され、認証に失敗した場合、アクティブ化は失敗します。
クライアントが明示的な COAUTHINFO 構造体を指定せず、代わりにポインタを NULL に設定した場合、COM はクライアントの認証を試みます。 クライアントを認証できない場合、COM は起動アクセス許可セキュリティ記述子をチェックして、 NULL DACL または Everyone へのアクセスを許可する ACL があるかどうかを確認します。 このチェック成功すると、サーバーが起動します。 そのため、クライアントが COAUTHINFO構造体を指定していない場合でも、サーバーで許可されたときに安全でないアクティブ化が行われる可能性があります。
Note
認証されていないネットワーク ユーザーが COM アプリケーションを実行できるようにするには、アプリケーション ロールに匿名ユーザーを含める必要があります。 Windows Server 2003 以降では、既定では、匿名ユーザーは Everyone グループに含まれません。
サーバーで許可されている場合、セキュリティで保護されていないアクティブ化が最終的に行われるにもかかわらず、クライアントがアクティブ化セキュリティを明示的にオフにしたいのはなぜですか? アクティブ化セキュリティを明示的にオフにすると、クライアントがセキュリティチェックを必要としない場合にパフォーマンスが向上するためです。
アクティブ化セキュリティを明示的に無効にするには、次のことを行う必要があります。
- クライアントは、アクティブ化機能に提供される COSERVERINFO 構造体のメンバーである COAUTHINFO 構造体のRPC_C_AUTHN_LEVEL_NONEの認証レベルを指定する必要があります。
- クライアントは、アクティベーション関数に提供される COSERVERINFO 構造体のメンバーである COAUTHINFO 構造体で RPC_C_IMP_LEVEL_IMPERSONATE の偽装レベルを指定する必要があります。 この値が渡されない場合は、RPC_S_SERVER_UNAVAILABLE が発生します。
- サーバーは、 デフォルトの起動権限に Everyone を指定する必要があります。 このタスクを実行するには、次のようにDcomcnfg.exeを使用することをお勧めします。
- Dcomcnfg.exe を実行します。
- [アプリケーション] ページで 、サーバーを表すアプリケーションを選択します。 [プロパティ] ボタンをクリックします (または、選択したアプリケーションをダブルクリックします)。
- [セキュリティ] プロパティ ページで、[カスタム起動アクセス許可の使用] ボタンをクリックします。
- [起動アクセス許可] 領域の [編集] ボタンを クリック します。
- [レジストリ値のアクセス許可] ダイアログ ボックスで、[追加] ボタンをクリックします。
- リスト ボックスの [Everyone] のエントリを選択します。
- [アクセスの種類] リスト ボックスで、[起動を許可] を選択します。
- [OK] をクリックします。
Note
Windows Server 2003 では、COM+ システム アプリケーションの認証機能に値 EOAC_DISABLE_AAA が含まれています。 この値は、Activate-as-activator (AAA) アクティベーションを無効にし、システム アプリケーションの起動時に CoInitializeSecurity 呼び出しで使用されます。 認証機能を EOAC_DISABLE_AAA に設定すると、特権アカウント (LocalSystem など) で実行されるアプリケーションは、その ID が信頼されていないコンポーネントの起動に使用されるのを防ぐことができます。
関連トピック