【问题标题】:Get list of groups-users-permissions-special permission for a folder in Windows 2003, programatically以编程方式获取 Windows 2003 中文件夹的组-用户-权限-特殊权限列表
【发布时间】:2011-04-23 18:33:25
【问题描述】:

我使用 Window 2003 服务器,我需要使用 C# 以编程方式获取有关安全文件夹的信息。

我想创建一个检查权限的工具。我需要获取文件夹的组、用户、权限和特殊权限,

C:\文档和设置\所有 用户\应用程序 数据\Microsoft\Crypto\RSA\MachineKeys

编辑:

以下是 GetSecurityDescriptorSddlForm 方法的示例代码。

public static string GetObjectPermission(string fullFolderName)
{
    FileSecurity fileSecure = File.GetAccessControl(fullFolderName);
    StringBuilder acer = new StringBuilder();
    fileSecure.GetSecurityDescriptorSddlForm(AccessControlSections.All);

    foreach (FileSystemAccessRule ace in fileSecure.GetAccessRules(true, true, typeof(NTAccount)))
    {
        acer.Append(ace.FileSystemRights + ":" + ' ' + ace.IdentityReference.Value + "\n");
    }
    return acer.ToString();
}

此示例代码将向您展示哪些 NTAccount 可以修改或读取文件夹,例如此功能。

如何获得组和特殊权限?

任何示例代码,建议?

【问题讨论】:

  • 当您说“获得特殊权限”时,您是否只想知道他们是否拥有它们,或者它们实际上是什么?
  • 我想知道他们是否真的有什么权限。
  • 啊,好的。因为很容易判断他们是否会检查 Windows 资源管理器中的特殊权限框,因为它返回一个负数。但是将该数字的每个部分与权限相关联会稍微复杂一些。

标签: c# security permissions ntfs


【解决方案1】:

如果你想获取文件夹 ACL 中的所有 ace 列表,你应该使用此方法,也可以使用此方法访问其他 ace 属性,例如 ace.AccessControlType , ace.IsInherited;

 public static void checkAceInformation(string fileName,string loginName)
        {
            string fileSystemRightsValue = "";

            FileSecurity security = File.GetAccessControl(FileName);

            AuthorizationRuleCollection acl = security.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

            foreach(FileSystemAccessRule ace in acl)
            {
                if(ace.IdentityReference.Value == LoginName)
                {
                    fileSystemRightsValue = ace.FileSystemRights.ToString();

                    Console.WriteLine(LoginName +  "  your permission value is" + fileSystemRightsValue)

                    return;
                }
            }
            Console.WriteLine(LoginName + "your not permission in this folder");

        }

【讨论】:

    【解决方案2】:

    您可以使用 DirectoryInfo 来获取 ACL 吗?所有 ACL 都应该在其中(用户、组):

            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);
    
            // Get a DirectorySecurity object that represents the  
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
    

    完整文档: http://msdn.microsoft.com/en-us/library/c1f66bc2(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 2014-07-03
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多