1

ディレクトリを作成し、ドメイン ユーザーにディレクトリの変更アクセス権を付与しようとする C# コンソール アプリがあります。アプリケーションは長い間正常に動作していましたが、突然UnauthorizedAcccesExceptionDirectorySecurity.SetAccessControlメソッドで をスローし始めました。

を使用して現在のユーザー アカウントを取得し、WindowsIdentity.GetCurrentそれが期待どおりのアカウントであることを確認しました (ログイン ユーザーには十分なアクセス権がないため、パワー ユーザーになりすます)。作成されたディレクトリのパワー ユーザーのアクセス許可を確認しましたが、完全な制御が可能です。

private DirectoryInfo CreateFolderWithOpenAccess(string directoryPath)
{
  DirectoryInfo directory = Directory.CreateDirectory(directoryPath);
  DirectorySecurity directorySecurity = directory.GetAccessControl();

  if (!HasModifyAccess(directory))
  {
    directorySecurity.AddAccessRule(
      new FileSystemAccessRule(
        Settings.Default.DomainUsers, 
        FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None, 
        AccessControlType.Allow
      )
    );

    directory.SetAccessControl(directorySecurity);
  }

  return directory;
}

何も見逃していないことを確認するために何を確認する必要があるかについて、誰か提案はありますか? これを行う別の方法はありますか?

4

1 に答える 1

0

IT 部門の担当者に確認したところ、私が作成していたフォルダーがネットワーク ファイル共有を使用してアクセスされていることがわかりました。アカウントが共有内のすべてのファイルとフォルダーに対して「フル コントロール」権限を持っていたとしても、共有レベルで「フル コントロール」権限を持っていなかったため、権限を変更するためのアクセス権を取得していなかったことが判明しました。この原因は、IT 担当者の 1 人が共有を再作成したが、アカウントの「フル コントロール」権限を再作成しなかった、データ サーバー上のフォルダーのシャッフルでした。共有アクセス許可は、次の方法で見つけることができます。

  1. 共有フォルダーのプロパティを開く
  2. 「共有」タブをクリックする
  3. 「高度な共有」をクリックする
  4. 「権限」をクリックする
  5. アカウントに「フル コントロール」があることを確認します
于 2013-02-28T16:03:21.793 に答える