次の方法で共有


WMI セキュリティ記述子オブジェクト

WMI には、セキュリティ記述子を読み取って操作して、セキュリティ保護可能なオブジェクトにアクセスできるユーザーを特定できるオブジェクトとメソッドがあります。

セキュリティ記述子の役割

セキュリティ記述子は、ファイル、レジストリ キー、WMI 名前空間、プリンター、サービス、共有など、セキュリティ保護可能なオブジェクトのセキュリティ属性を定義します。 セキュリティ記述子には、オブジェクトの所有者グループとプライマリ グループに関する情報が含まれています。 プロバイダーは、リソース セキュリティ記述子と要求元ユーザーの ID を比較し、ユーザーが要求しているリソースにアクセスする権限があるかどうかを判断できます。 詳細については、「WMI セキュリティ保護可能なオブジェクトへのアクセス」を参照してください。

GetSDなど、一部の WMI メソッドは、バイナリ バイト配列形式でセキュリティ記述子を返します。 Windows Vista 以降では、Win32_SecurityDescriptorHelper クラスのメソッドを使用して、バイナリ セキュリティ記述子を Win32_SecurityDescriptorのインスタンスに変換します。これは、より簡単に操作できます。 詳細については、「セキュリティ保護可能なオブジェクトのアクセス セキュリティの変更 を参照してください。

アクセス制御と WMI セキュリティ オブジェクト

WMI セキュリティ オブジェクトの一覧を次に示します。

次の図は、WMI セキュリティ オブジェクト間の関係を示しています。

wmi セキュリティ オブジェクト間の関係を

アクセス セキュリティの役割の詳細については、「セキュリティのベスト プラクティスのWMI セキュリティの管理」、および「アクセス制御」を参照してください。

Win32_SecurityDescriptor オブジェクト

次の表に、Win32_SecurityDescriptor クラスのプロパティを示します。

財産 形容
ControlFlags SD またはその個々のメンバーの意味を修飾する制御ビットのセット。 ControlFlags ビット値の設定の詳細については、Win32_SecurityDescriptorを参照してください。
DACL ユーザーとグループの随意アクセス制御リスト (ACL) と、セキュリティで保護されたオブジェクトに対するアクセス権です。 このプロパティには、アクセス制御エントリ表す Win32_ACE インスタンスの配列が含まれています。 詳細については、「DACLの作成」を参照してください。
グループ このセキュリティで保護されたオブジェクトが属するグループ。 このプロパティには、所有者が属するグループの名前、ドメイン、およびセキュリティ識別子 (SID) を含む Win32_Trustee のインスタンスが含まれています。
所有者 このセキュリティで保護されたオブジェクトの所有者。 このプロパティには、所有者の名前、ドメイン、およびセキュリティ識別子 (SID) を含む Win32_Trustee のインスタンスが含まれています。
SACL する システム アクセス制御リスト (ACL) には、ユーザーまたはグループの監査レコードを生成するアクセス試行の種類を表す Win32_ACE インスタンスの配列が含まれています。 詳細については、「新しいオブジェクト の SACL をする」を参照してください。

DACL と SACL

随意アクセス制御リスト (DACL) とシステム アクセス制御リスト {SACL) の Win32_ACE オブジェクトの配列により、ユーザーまたはグループとそのアクセス権の間にリンクが作成されます。

DACL プロパティにアクセス制御エントリ (ACE) が含まれていない場合、アクセス権は付与されず、オブジェクトへのアクセスは拒否されます。

手記

NULL DACL は、すべてのユーザーにフル アクセスを提供します。これは重大なセキュリティ リスクです。 詳細については、「DACLの作成」を参照してください。

Win32_ACE、Win32_Trustee、Win32_SID

Win32_ACE オブジェクトには、ユーザーまたはグループを識別する Win32_Trustee クラスのインスタンスと、ユーザーまたはグループが実行できるアクションを指定するビットマスクである AccessMask プロパティが含まれます。 たとえば、ユーザーまたはグループには、ファイルを読み取る権限は与えられているが、ファイルへの書き込み権限は付与されない場合があります。 Win32_ACE オブジェクトには、許可アクセスか拒否アクセスかを示す ACE も含まれます。

手記

DACL ではアクセス制御エントリ (ACE) の許可と拒否の両方が許可されるため、DACL の Win32_ACE 順序が重要です。 詳細については、DACL の ACE の順序のを参照してください。

Win32_Trustee によって表される各ユーザー アカウントまたはグループには、アカウントを一意に識別し、アカウントのアクセス特権を指定するセキュリティ識別子 (SID) があります。 SID データを指定する方法は、オペレーティング システムによって異なります。 詳細については、「セキュリティ保護可能なオブジェクトのアクセス セキュリティの変更 を参照してください。

次の図は、1 つの Win32_ACE インスタンスの内容を示しています。

1 つの win32-ace インスタンスする

例: プリンターにアクセスできるユーザーの確認

次の VBScript コード例は、プリンターのセキュリティ記述子を使用する方法を示しています。 このスクリプトは、Win32_Printer クラスの GetSecurityDescriptor メソッドを呼び出して記述子を取得し、セキュリティ記述子に随意アクセス制御リスト (DACL) が存在するかどうかを判断します。 DACL がある場合、スクリプトは DACL からアクセス制御エントリ (ACE) の一覧を取得します。 各 ACE は、Win32_ACEのインスタンスによって表されます。 このスクリプトは、すべての ACE をチェックしてユーザーの名前を取得し、ユーザーがプリンターにアクセスできるかどうかを判断します。 ユーザーは、Win32_ACE インスタンスに埋め込まれた Win32_Trustee のインスタンスによって表されます。

SE_DACL_PRESENT = &h4
ACCESS_ALLOWED_ACE_TYPE = &h0
ACCESS_DENIED_ACE_TYPE  = &h1

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
   Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer
    Return = objPrinter.GetSecurityDescriptor( objSD )
    If ( return <> 0 ) Then
 WScript.Echo "Could not get security descriptor: " & Return
 wscript.Quit Return
    End If
' Extract the security descriptor flags
    intControlFlags = objSD.ControlFlags
    If intControlFlags AND SE_DACL_PRESENT Then
' Get the ACE entries from security descriptor
        colACEs = objSD.DACL
    For Each objACE in colACEs
' Get all the trustees and determine which have access to printer
        WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name
        If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then
            WScript.Echo vbTab & "User has access to printer"
        ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then
            WScript.Echo vbTab & "User does not have access to the printer"
        End If
    Next
    Else
    WScript.Echo "No DACL found in security descriptor"
End If
Next

セキュリティ保護可能なオブジェクト のアクセス セキュリティの変更の

セキュリティ記述子ヘルパー クラス

セキュリティのベスト プラクティス

WMI セキュリティ の維持

アクセス制御の

WMI 名前空間へのアクセス