セキュリティ保護可能なオブジェクトのアクセス セキュリティの変更
プリンター、サービス、レジストリ キー、DCOM アプリケーション、WMI 名前空間はセキュリティ保護可能なオブジェクトです。 セキュリティ保護可能なオブジェクトへのアクセスは、アクセス権を持つユーザーを指定する "セキュリティ記述子" によって保護されています。 Windows Vista 以降、多くのセキュリティ保護可能なオブジェクトにはセキュリティ記述子を取得または設定するメソッドがあります。 適切なアクセス許可があれば、セキュリティ保護可能なオブジェクトのセキュリティ記述子を読み取ることや変更することができます。 これらの方法を使うと、プリンター、サービス、WMI 名前空間、またはその他のオブジェクトにアクセスできるユーザー アカウントまたはグループを制御することができます。 セキュリティ記述子と WMI での使用方法の詳細については、「WMI セキュリティ保護可能オブジェクトへのアクセス」を参照してください。
このトピックでは、以下のセクションについて説明します。
オブジェクトとセキュリティ記述子のメソッド
次の一覧は、セキュリティ保護可能なオブジェクトが備えるメソッドをまとめたものです。これを使ってセキュリティ記述子の読み取りまたは変更を行うことができます。
WMI 名前空間
プロバイダーは、特定のグループのみが WMI 名前空間内のデータにアクセスできるようにするセキュリティを確立できます。 名前空間のセキュリティは、__SystemSecurity クラスのメソッドによって制御されます。 Windows Vista 以降、GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドを使って __SecurityDescriptor オブジェクトを返すことや、書き込むことができるようになりました。 詳細については、「名前空間セキュリティ記述子の設定」を参照してください。
レジストリ キー
Windows Vista 以降、権限のないユーザーが変更できないように、レジストリ キーをセキュリティで保護できるようになりました。 StdRegProv クラスには GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドがあります。 これらのメソッドは Win32_SecurityDescriptor オブジェクトを返し、書き込みます。
プリンター
Windows Vista 以降、GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドを使って Win32_Printer クラスのインスタンスへのアクセスをセキュリティで保護できるようになりました。 これらのメソッドは Win32_SecurityDescriptor オブジェクトを返し、書き込みます。
サービス
Windows Vista 以降、GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドを使って Win32_Service クラスのインスタンスへのアクセスをセキュリティで保護できるようになりました。 これらのメソッドは Win32_SecurityDescriptor オブジェクトを返し、書き込みます。
DCOM アプリケーション
DCOM アプリケーション インスタンスには、いくつかのセキュリティ記述子があります。 Windows Vista 以降、Win32_DCOMApplicationSetting クラスのメソッドを使って、さまざまなセキュリティ記述子を取得または変更できるようになりました。 セキュリティ記述子は、Win32_SecurityDescriptor クラスのインスタンスとして返されます。
構成アクセス許可を取得または変更するには、GetConfigurationSecurityDescriptor メソッドまたは SetConfigurationSecurityDescriptor メソッドを呼び出します。
アクセス許可を取得または変更するには、GetAccessSecurityDescriptor メソッドまたは SetAccessSecurityDescriptor メソッドを呼び出します。
スタートアップとアクティビティのアクセス許可を取得または変更するには、GetLaunchSecurityDescriptor メソッドまたは SetLaunchSecurityDescriptor メソッドを呼び出します。
ファイル
GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドは、CIM_DataFile クラスではなく、Win32_LogicalFileSecuritySetting クラスです。
共有
GetSecurityDescriptor メソッドと SetSecurityDescriptor メソッドは、Win32_Share クラスではなく、Win32_LogicalShareSecuritySetting クラスです。
注意
SetSecurityDescriptor メソッドの呼び出しで新しい "セキュリティ アクセス制御リスト (SACL)" を指定しない場合、対象のセキュリティ保護可能なオブジェクトのセキュリティ記述子 SACL は null に設定されるので、以前の SACL 設定は保持されません。
セキュリティ記述子の形式間の変換
セキュリティ記述子は複雑なバイナリ バイト配列であり、通常は C++ で作成および変更する必要があります。 いずれかの Get メソッドを使ってセキュリティ記述子を取得したら、Win32_SecurityDescriptorHelper クラスには、セキュリティ記述子をセキュリティ記述子定義言語 (SDDL) または Win32_SecurityDescriptor インスタンスに変換するメソッドが用意されています。
Win32_SecurityDescriptor インスタンスまたは SDDL で、アクセス制御リスト (ACL) をより簡単に操作することができます。 WMI のセキュリティ記述子の構造と使用方法については、「WMI セキュリティ記述子オブジェクト」を参照してください。
C++ または C# では、変換関数を使ってバイナリ セキュリティ記述子をセキュリティ記述子定義言語 (SDDL) に変換します。 C++ アプリケーションでセキュリティ記述子の値を変更するには、ConvertSecurityDescriptorToStringSecurityDescriptor と ConvertStringSecurityDescriptorToSecurityDescriptor を使います。
セキュリティの問題
セキュリティ記述子の変更は、オブジェクトのセキュリティが損なわれないように細心の注意を払って行うことをお勧めします。 随意アクセス制御リスト (DACL) 内のアクセス制御エントリ (ACE) の順序は、アクセス セキュリティに影響する可能性があります。 詳細については、「DACL 内の ACE の順序」を参照してください。
関連トピック