2009-06-24 4 views
5

asp.netアプリケーションでは、いくつかのxmlファイルを自分のコンピュータのローカルフォルダにftpsするタスクがあります。私はそれらのファイルを読んでみたいですが、自分のローカルフォルダにコピーしたときには、ネットワークサービスのユーザーアカウントが設定されていません。だから、私の質問は、.NET C#で、あなたはプログラムで "Network Service"アカウントをフルコントロールでxmlファイルに追加するのですか?C#でファイルにセキュリティ権限をプログラムで追加する

答えて

1

このコードを試してみてくださいヘルプ

場合
public static bool CheckReadWriteAccces(string filePath, System.Security.AccessControl.FileSystemRights fileSystemRights) 
    { 
     FileInfo fileInfo = new FileInfo(filePath); 

     string str = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToUpper(); 
     foreach (System.Security.AccessControl.FileSystemAccessRule rule in fileInfo.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
     { 
      if (str == rule.IdentityReference.Value.ToUpper()) 
       return ((rule.AccessControlType == System.Security.AccessControl.AccessControlType.Allow) && (fileSystemRights == (rule.FileSystemRights & fileSystemRights))); 
     } 

     return false; 
    } 


    /// <summary> 
    /// Make a file writteble 
    /// </summary> 
    /// <param name="path">File name to change</param> 
    public static void MakeWritable(string path) 
    { 
     if (!File.Exists(path)) 
      return; 
     File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly); 
    } 
4

次のコード例は、追加したファイルからアクセス制御リスト(ACL)エントリを削除するFileSecurityクラスを使用FileSecurity class in MSDN

を参照してください。この例を実行するには、有効なユーザーまたはグループアカウントを指定する必要があります。

using System; 
using System.IO; 
using System.Security.AccessControl; 

namespace FileSystemExample 
{ 
    class FileExample 
    { 
     public static void Main() 
     { 
      try 
      { 
       string fileName = "test.xml"; 

       Console.WriteLine("Adding access control entry for " 
        + fileName); 

       // Add the access control entry to the file. 
       AddFileSecurity(fileName, @"DomainName\AccountName", 
        FileSystemRights.FullControl, AccessControlType.Allow); 

       Console.WriteLine("Removing access control entry from " 
        + fileName); 

       // Remove the access control entry from the file. 
       RemoveFileSecurity(fileName, @"DomainName\AccountName", 
        FileSystemRights.FullControl, AccessControlType.Allow); 

       Console.WriteLine("Done."); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
     } 

     // Adds an ACL entry on the specified file for the specified account. 
     public static void AddFileSecurity(string fileName, string account, 
      FileSystemRights rights, AccessControlType controlType) 
     { 


      // Get a FileSecurity object that represents the 
      // current security settings. 
      FileSecurity fSecurity = File.GetAccessControl(fileName); 

      // Add the FileSystemAccessRule to the security settings. 
      fSecurity.AddAccessRule(new FileSystemAccessRule(account, 
       rights, controlType)); 

      // Set the new access settings. 
      File.SetAccessControl(fileName, fSecurity); 

     } 

     // Removes an ACL entry on the specified file for the specified account. 
     public static void RemoveFileSecurity(string fileName, string account, 
      FileSystemRights rights, AccessControlType controlType) 
     { 

      // Get a FileSecurity object that represents the 
      // current security settings. 
      FileSecurity fSecurity = File.GetAccessControl(fileName); 

      // Remove the FileSystemAccessRule from the security settings. 
      fSecurity.RemoveAccessRule(new FileSystemAccessRule(account, 
       rights, controlType)); 

      // Set the new access settings. 
      File.SetAccessControl(fileName, fSecurity); 

     } 
    } 
} 
関連する問題