Назад | Перейти на главную страницу

Пользователь ApplicationPoolIdentity не может изменять файлы в общей папке в Windows Server 2008

Я создаю каталоги и записываю файлы в общую папку в моем веб-приложении, которое размещается на Windows Server 2008. Я запускаю пул приложений с удостоверением ApplicationPoolIdentity.

Чтобы дать вам представление о моих настройках… Я установил права доступа к корню корневого каталога моего веб-приложения для двух разных пользователей: «IUSR» и «IIS APPPOOL \ MYPOOL». Я использую имя «MYPOOL» в качестве имени моего пула приложений, поэтому на него легко ссылаться.

Приложение не может изменять и записывать в общую папку. Я щелкнул правой кнопкой мыши общую папку, в которой я создаю каталоги и в которую пишу, и щелкнул вкладку «Безопасность». Затем я нажал «Редактировать». Под объектами я проверил "Компьютер". Затем в разделе "МЕСТОПОЛОЖЕНИЕ" я попробовал компьютер / сервер, на котором работает мое веб-приложение. Однако я не смог найти своего пользователя "MYPOOL" под пользователями. Я пытался перейти по этой ссылке, но она была не очень полной. Я не знаю, какого пользователя использовать. Я продолжаю получать исключение System.IO, потому что у него нет разрешений. Как только я узнаю, какого пользователя использовать, мне нужно будет предоставить разрешения «Изменить» для каталога «ExportPath».

У меня это не сработало: http://grekai.wordpress.com/2011/05/23/permissions-for-shared-folder-for-iis-7-application-pool-identity-across-domain/

Для быстрого теста я сделал фиктивную страницу с именем FilePermissionsTest.aspx и поместил код для записи файла, чтобы создать каталог и записать файл в мое событие Page_Load кода позади. Но я еще не успел проверить это, потому что он не будет записывать файл.

...

<div>
Check to see if the file "_File_Permissions_Test.txt" was written to <% Response.Write(Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing))%> 
</div>

...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim exportPath As String = Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing)
    If exportPath = String.Empty Then Return
    Dim exportDirectory As DirectoryInfo = Directory.CreateDirectory(exportPath)

    Dim writer As StreamWriter = File.CreateText(Path.Combine(exportDirectory.FullName, "_File_Permissions_Test.txt"))
    writer.WriteLine("TESTING... " + DateTime.Now().ToString)
    writer.Flush()
    writer.Close()

End Sub

Если вы запускаете пул приложений с использованием указанного удостоверения, предоставление разрешения учетной записи компьютера не сработает. Вы должны запустить пул приложений с учетной записью домена и предоставить этой учетной записи соответствующие разрешения для общей папки. Использование локальной учетной записи также не будет работать, если общая папка находится на удаленном компьютере.

Если у вас нет домена, вы можете запустить AppPool с помощью LocalSystem, и это должно работать с предоставлением разрешения учетной записи компьютера для общей папки. Но это, вероятно, было бы неоптимально с точки зрения безопасности.

Вы должны были ввести имя компьютера, а не ApplicationPoolIdentity. Это была ваша проблема. Попробуйте! Он должен работать.