Могу ли я изменить владельца файла, сохраненного через IIS (с ASP.NET) - PullRequest
0 голосов
/ 28 января 2009

Есть ли способ изменить владельца сохраненного файла с помощью IIS на Windows Server. Чем проще, тем лучше. Неважно, что это нужно будет сделать во время сохранения или изменения владельца файла после того, как файл уже сохранен на диск. Пример в ASP.NET сильно сокращен.

Ответы [ 3 ]

1 голос
/ 28 января 2009

Теоретически это должно быть довольно просто. Вы должны иметь возможность сделать что-то подобное, чтобы изменить владельца существующего файла:

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 не позволит вам изменить владельца файла на что-либо, кроме текущего пользователя или группы администраторов.

Когда он попадает в последнюю строку, вы получите исключение «Идентификатор безопасности не может быть владельцем этого объекта».

Гугл предполагает, что, возможно, можно обойти эту проблему, но я не смог заставить работать обходные пути, когда пытался в прошлом. Мне было бы очень интересно узнать, удалось ли кому-нибудь успешно справиться с этой задачей.

1 голос
/ 26 октября 2009

Пользователь может назначить владение другим пользователям, если у них есть привилегия Восстановить файлы и каталоги. Это отключено по умолчанию, поэтому вам нужно включить его, прежде чем пытаться установить владельца. .Net не имеет встроенной поддержки для этого, поэтому вам нужно PInvoke AdjustTokenPrivileges и использовать другие неуправляемые функции, чтобы получить входные данные для этого.

Я написал подробное описание его использования в моем блоге

0 голосов
/ 28 января 2009

Хотя это не индивидуальный пример, я считаю, что ваш ответ лежит в System.Security.AccessControl пространство имен.

Взгляните на класс FileSecurity, который позволяет вам определять правила и разрешения. Класс FileSecurity используется такими методами, как File.Create ().

...