【问题标题】:VB.Net SetAccessControl fails when reseting permissions重置权限时 VB.Net SetAccessControl 失败
【发布时间】:2018-02-02 15:36:32
【问题描述】:

我需要重置从我的 ASP.Net Web 表单应用程序(这是一个遗留项目)创建的文件夹的权限。我可以正常创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,我收到错误“尝试执行未经授权的操作。”

当我创建安全规则时,我使用以下代码:

securityRules.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.InheritOnly, AccessControlType.Allow))

它被封装在一个名为 GetSecurity(proj As Project) 的函数中,该函数返回一个 DirectorySecurity 对象。

我的失败代码如下。 If 的第一部分工作正常,但 Else 部分失败。

Dim projectPath = fullPath + "\" + finalFolder
If Not My.Computer.FileSystem.DirectoryExists(projectPath ) Then
    Dim directoryProperties As System.IO.DirectoryInfo = 
    Directory.CreateDirectory(projectPath, GetSecurity(proj))
Else
    Dim directoryProperties As System.IO.DirectoryInfo = New DirectoryInfo(projectPath)
    directoryProperties.SetAccessControl(GetProposalSecurity(proj))
End If

我确保将自己添加到函数中的文件夹中,因为它在我的本地计算机上作为 IIS 运行。我也是远程服务器上文件夹的所有者。

【问题讨论】:

    标签: asp.net vb.net directory file-permissions


    【解决方案1】:

    可能最好的方法是将访问规则添加到 DirectoryInfoDirectorySecurity 对象(在您的情况下 directoryProperties

    然后通过添加新规则将DirectorySecurity对象设置为目录信息对象的SetAccessControl

    您的 else 语句可能如下所示..

    Dim directoryProperties As System.IO.DirectoryInfo = New DirectoryInfo("C:\\sers\\xxxx\\")
    'Get a DirectorySecurity object that represents the current security settings.
    Dim dSecurity As DirectorySecurity = directoryProperties.GetAccessControl()
    'Add the FileSystemAccessRule to the security settings. 
    dSecurity.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, AccessControlType.Allow))
    'Set the new access settings.
    directoryProperties.SetAccessControl(dSecurity)
    

    也请查看以下文档..

    https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.setaccesscontrol?view=netframework-4.7#System_IO_DirectoryInfo_SetAccessControl_System_Security_AccessControl_DirectorySecurity_

    【讨论】:

    • 我正在尝试完全替换文件夹上的当前访问规则。我发现如果我手动设置权限以应用于“此文件夹、子文件夹和文件”,我可以使用上面的代码重置权限。有没有办法在访问规则上设置“应用到”?
    • 尝试使用“inheritanceFlags”和“propagationFlags”。设置 InheritanceFlags.ContainerInherit、PropagationFlags.InheritOnly。所以“FileSystemAccessRule”构造函数看起来像...... FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly, AccessControlType.Allow)
    • 不幸的是,这不起作用。当我从服务器将其视为域管理员时,我确实注意到目录上没有设置所有者。代码:FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)
    • 您是否正确检查了域和用户组??
    • 如果域是“xyz”,然后在 Windows 搜索中尝试“\\xyz”....检查是否发生任何事情
    【解决方案2】:

    我在 Else 块中添加了模拟自己的代码。

    https://nujakcities.wordpress.com/2011/08/01/use-vb-net-to-impersonate-a-domain-user/

    它工作正常。这不是一个完美的解决方案,但由于我用 MVC 应用程序替换整个应用程序来做同样的事情,所以我并不太担心。

    katamarayudu,感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2014-08-07
      • 2015-12-03
      • 1970-01-01
      相关资源
      最近更新 更多