1

C#プログラムでWindowsマシン上のローカルの既存のディレクトリを保護しようとしています。セキュリティ上の理由から、管理者グループのアカウントのみがこのフォルダーにアクセスできるようにします。既存のフォルダーは、私のプログラムが以前に作成したフォルダーであり、現在実行中のユーザーが所有するため、管理者グループの特権を追加してから、現在のユーザーの特権を削除する必要があります。

管理者グループの権限をフォルダに追加することはできますが、現在のユーザーの権限を削除する方法がわかりません。私は次のように管理者グループに権限を与えています:

DirectorySecurity directorySecurity = new DirectorySecurity();
IdentityReference adminId = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
FileSystemAccessRule adminAccess = new FileSystemAccessRule(
    adminId,
    FileSystemRights.FullControl,
    InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
    PropagationFlags.None,
    AccessControlType.Allow);
directorySecurity.AddAccessRule(adminAccess);

// set the owner and the group to admins
directorySecurity.SetOwner(adminId);
directorySecurity.SetGroup(adminId);

Directory.SetAccessControl("path-to-my-directory", directorySecurity);
4

3 に答える 3

3

私は今、本当の問題を見ています。既存のディレクトリセキュリティを取得して変更するのではなく、ディレクトリセキュリティを新しいオブジェクトに設定することで、他のユーザーのアクセスを効果的に削除していましたが、ディレクトリは引き続き親から継承されたアクセス許可を取得していました。

親の継承を削除するために新しいディレクトリセキュリティオブジェクトに必要なもの。これは、 SetAccessRuleProtectionメソッドを介して実行できます。上記のコードをそのまま使用できますが、ディレクトリにアクセス制御を設定する前に、この行を追加してください。

directorySecurity.SetAccessRuleProtection(true, false);
于 2012-10-22T15:44:26.207 に答える
0

ここで定義されているRemoveAccessRule*メソッドのいずれかを使用して、現在のユーザーのアクセスを含むアクセスルールを削除する必要があります。

または、アクセスルールを追加して、現在のユーザーへのアクセスを拒否することもできますが、私は常に拒否ルールを避けようとします。通常、アクセスを拒否するよりも、アクセスを許可しない方が適切です(財務記録やその他の機密情報のように、アクセスを完全に拒否することを実際に意図している場合を除きます)。参考までに、アクセス拒否ルールはすべてのアクセス許可ルールを上書きします。

于 2012-10-16T16:44:14.133 に答える
0

この質問に対する私の答えを参照してください。ファイルシステムのアクセス許可を変更するために作成する必要のあるコードについて説明します。リストされているすべての手順を実行しないと、ファイルシステムのアクセス許可を正常に変更できません。

于 2012-10-22T16:20:20.850 に答える