アクセス制御リスト (ACL: Access Control List) の技術概要 † http://msdn.microsoft.com/ja-jp/library/ms229936(VS.80).aspx NTFS のセキュリティ機能と落とし穴 http://www.ipa.go.jp/security/awareness/vendor/programming/b08_03_main.html WSH ウォークスルー (DACLを操作する) http://msdn.microsoft.com/ja-jp/library/cc364508.aspx ユーザーをASPで作成 http://winofsql.jp/VA003334/smalltech040218163326.htm ↑ ファイルのアクセス許可設定のサンプル c:\scripts\test.txt のアクセス許可を変更します Option Explicit Dim instance Dim strMoniker Dim objDescriptor Dim retval Dim DACL Dim controlFlags Dim accessmask Dim Group Dim Owner Dim SACL Dim number_of_trustees Dim trustee_Domain Dim trustee_Name Dim trustee_Sidstring Dim i Dim strACL '' アクセス権のマスク Const FULLACCESS = 2032127 '' フルアクセス(All) Const READ = 1179817 '' 読み取り(RX) Const UPDATE = 1245631 '' 変更(RWXD) Const R = 1179785 '' 特殊なアクセス権(R) Const W = 1179926 '' 特殊なアクセス権(W) Const X = 1179808 '' 特殊なアクセス権(X) Const D = 65536 '' 特殊なアクセス権(D) Const P = 262144 '' 特殊なアクセス権(P) Const O = 524288 '' 特殊なアクセス権(O) Const ImpLevel = "{impersonationLevel=impersonate}" Const namespace = "!root\cimv2:" Const objectpath = _ "Win32_LogicalFileSecuritySetting=""c:\\scripts\\test.txt""" strMoniker = "winmgmts:" & ImpLevel & namespace & objectpath Set instance = GetObject(strMoniker) If instance Is Nothing Then MsgBox ("インスタンスを取得出来ません。") WSCript.Quit End If retval = instance.getsecuritydescriptor(objDescriptor) Set DACL = objDescriptor.Properties_.Item("dacl") ' get dacl controlFlags = objDescriptor.Properties_.Item("controlflags") Set Group = objDescriptor.Properties_.Item("Group") Set Owner = objDescriptor.Properties_.Item("Owner") Set SACL = objDescriptor.Properties_.Item("Sacl") number_of_trustees = UBound(DACL.Value) WScript.Echo "ドメイン名\ユーザ名:SID\アクセス権\アクセスマスク" For i = 0 To number_of_trustees Set trustee_Domain = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Domain") Set trustee_Name = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Name") Set trustee_Sidstring = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Sidstring") accessmask = DACL.Value(i).Properties_.Item _ ("AccessMask").Value ' Save the accessmask Select Case accessmask Case FULLACCESS strACL = "フルコントロール(All)" Case READ strACL = "読み取り(RX)" Case UPDATE strACL = "変更(RWXD)" Case Else strACL = accessmask End Select WScript.Echo trustee_domain & "\" & trustee_name & ":" & trustee_Sidstring & ":" & strACL & ":" & accessmask If trustee_name = "Administrators" Then 'アクセス許可の設定 'Administratorsを「読み取り」にする objDescriptor.Properties_.Item("dacl").Value(i).Properties_.Item _ ("AccessMask").Value = R End If Next retval = instance.setsecuritydescriptor(objDescriptor) If retval = 0 Then MsgBox "成功しました。" Else MsgBox "セキュリティ設定を変更できませんでした。" End If Set instance = Nothing WSCript.Quit