継承されているファイルのアクセス権を削除する

継承されているファイルのアクセス権を削除するコードを紹介します。

概要

ファイルやフォルダに追加されたアクセス権を削除する場合はこちらこちらの方法でアクセス権を削除できますが、 ファイルやフォルダのアクセス権が親フォルダのアクセス権を継承している場合は前述の方法では削除できません。 アクセス権が継承されている場合は、まず、アクセス権の継承を削除した後にファイルのアクセス権を変更する必要があります。

コード例 (.NET Core / .NET 5以降)

private void button_RemoveInheritance_Click(object sender, EventArgs e)
{
  string filePath = @"c:\\develop\text.txt";

  FileInfo fi = new FileInfo(filePath);
  FileSecurity security = FileSystemAclExtensions.GetAccessControl(fi);

  security.SetAccessRuleProtection(true, true);
  security.PurgeAccessRules(new NTAccount("Users"));
  FileSystemAclExtensions.SetAccessControl(fi, security);
}

解説

指定したファイルのFileInfoオブジェクトを取得します。

  string filePath = @"c:\\develop\text.txt";
  FileInfo fi = new FileInfo(filePath);

FileInfoオブジェクトからFileSecurity オブジェクトを取得します。

  FileSecurity security = FileSystemAclExtensions.GetAccessControl(fi);


継承されているファイルのアクセス権を変更できるようにします。一番目の引数で継承をするかしないかを設定します。 上記の例ではtrueですので、継承を保護する設定になり、アクセス権の変更ができます。 2番目の引数は継承されたアクセス権を保存するかの設定です。上記の例ではtrueに設定されていますので、継承されたアクセス権はそのままファイルに残った状態になります。 (1番目の引数をTrueにしてアクセス権を継承させた場合は、アクセス権が継承されるためファイルには継承されたアクセス権が付与されるため、2番目の引数は無視されます。)

  security.SetAccessRuleProtection(true, true);


下記コードでアクセス権を削除します。今回の例ではUsersのアクセス権を削除しています。

  security.PurgeAccessRules(new NTAccount("Users"));

セキュリティオブジェクトをc:\develop\text.txtに適応します。

  FileSystemAclExtensions.SetAccessControl(fi, security);

コード例 (.NET Framework)

private void button_RemoveInheritance_Click(object sender, EventArgs e)
{
  string filePath = @"c:\\develop\text.txt";
  FileSecurity security = File.GetAccessControl(filePath);
  security.SetAccessRuleProtection(true, true);
  security.PurgeAccessRules(new NTAccount("Users"));
  File.SetAccessControl(filePath, security);
}

解説

指定したファイルのセキュリティ情報(ファイルセキュリティオブジェクト)を取得します。

FileSecurity security = File.GetAccessControl(filePath);

継承されているファイルのアクセス権を変更できるようにします。

security.SetAccessRuleProtection(true, true);


下記コードでアクセス権を削除します。今回の例ではUsersのアクセス権を削除しています。

security.PurgeAccessRules(new NTAccount("Users"));

セキュリティオブジェクトをc:\develop\text.txtに適応します。

File.SetAccessControl(filePath, security);

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2010-11-25
改訂日: 2022-11-03
Copyright © 1995–2025 iPentec all rights reserverd.