4

フォルダー監査オプションの下にある「適用先」フィールドをプログラムで設定しようとしています。MSDNのコード例では、FileSystemAuditRule クラスを使用して新しい監査規則をフォルダーに追加しています。このクラスには、特定の監査規則を適用する必要があるものを設定する明確なものはありません。

これは、いくつかの権限を設定するために使用しているコードです。

const string myFolder = @"S:\Temp\SomeFolderToAudit";

var account = new SecurityIdentifier(WellKnownSidType.WorldSid, null).Translate(typeof(NTAccount));

FileSecurity fSecurity = File.GetAccessControl(myFolder, AccessControlSections.Audit);

fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, AuditFlags.Success));

File.SetAccessControl(myFolder, fSecurity);

これにより、以下の強調表示されたオプションを除いて、監査ルールが適切に作成されます。 設定されていないオプションに適用

たとえば、これを「このフォルダー、サブフォルダー、およびファイル」にするか、「このフォルダーのみ」以外にする必要があります。すべてのディレクトリとファイルをトラバースして、それらに同じ監査ルールを設定したくありません。継承も管理したくありません。ルールはそれから保護されます。できればマネージ コードを使用してこのオプションを設定する方法が必要です (これが唯一の方法である場合は、P/Invokes を歓迎します)。

ご協力いただきありがとうございます。

4

1 に答える 1

4

少しいじった後、「Applies to」フィールドを設定する方法を見つけることができました。監査ルール オブジェクトを作成するときは、InheritanceFlags と PropagationFlags を組み合わせて使用​​する必要があります。

フラグの組み合わせとその結果が「適用先」フィールドにどのようなものかを示すコード例 (質問の例に基づく) は次のとおりです。

// This folder only (default)
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.None, PropagationFlags.None, AuditFlags.Success));
// This folder and subfolders
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.None, AuditFlags.Success));
// This folder and files
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success));
// This folder, subfolders and files
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success));
// Subfolders only
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AuditFlags.Success));
// Files only
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success));
// Subfolders and files only
fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success));

アクセス制御に関するこの情報とその他の多くの情報は、Michael Taylor によるこの非常に便利なページにあります。

于 2013-05-04T08:56:18.360 に答える