0

有没有办法在 Windows Server 上使用 IIS 更改已保存文件的所有者。越容易越好。在文件已经保存到光盘之后,这将在保存或更改文件所有者期间完成,这并不重要。ASP.NET 中的一个示例非常受欢迎。

4

3 回答 3

1

从理论上讲,它应该是相当直截了当的。您应该能够执行以下操作来更改现有文件的所有权:

string domain = "domain";
string user = "username";

FileInfo info = new FileInfo(@"c:\test.txt");

FileSecurity security = info.GetAccessControl();

System.Security.Principal.NTAccount newOwner =
    new System.Security.Principal.NTAccount(domain, user);

security.AddAccessRule(
        new FileSystemAccessRule(newOwner, FileSystemRights.FullControl,
            AccessControlType.Allow));
security.SetAccessRuleProtection(true, false);
security.SetOwner(newOwner);

info.SetAccessControl(security);

然而,在实践中,由于 Windows 施加的限制,这实际上并不起作用。Windows 不允许您将文件的所有者更改为当前用户或管理员组以外的任何内容。

当它到达最后一行时,您将收到异常“不允许安全标识符成为此对象的所有者”。

谷歌搜索表明有可能解决这个问题,但是当我过去尝试过时,我未能让解决方法发挥作用。我很想知道是否有人成功地完成了这项工作。

于 2009-01-28T18:12:28.697 回答
1

如果用户具有“还原文件和目录”权限,则用户可以将所有权分配给其他用户。默认情况下禁用此功能,因此您需要在尝试设置所有者之前启用它。.Net 没有对此的内置支持,因此您需要 PInvoke AdjustTokenPrivileges 并使用其他非托管函数来获取对此的输入。

我已经在我的博客上详细描述了它的使用

于 2009-10-26T00:44:18.743 回答
0

虽然这不是自定义示例,但我相信您的答案在于 System.Security.AccessControl命名空间。

查看 FileSecurity 类,它可以让您识别规则和权限。FileSecurity 类由 File.Create() 等方法使用。

于 2009-01-28T17:07:47.830 回答