Хорошо. Здесь мы пытаемся создать классический веб-сайт ASP в IIS 7.5 в Windows Server 2008 R2. В корне веб-сайта есть папка с именем dbc и файл, который используется для чтения и записи определенной информации во время обработки каждой страницы.
Проблема в том, что если я даю разрешения на запись IUSR и разрешения на запись IIS_IUSRS или разрешения на запись DefaultAppPool, я получаю сообщение «Доступ к пути 'E: .. \ websiteroot \ dbc \ filename.txt' запрещен»
Но если я предоставлю ВСЕМ доступ на запись в этой папке dbc, то я не получу никаких ошибок, все кажется идеальным.
Дополнительная информация: веб-сайт работает в режиме классического конвейера, включена анонимная аутентификация (возможно, это единственная включенная аутентификация) .. И я попробовал анонимную аутентификацию с использованием учетной записи IUSR, а также идентификатора пула приложений. В моем случае ApplicationPoolIdentity - это идентификатор для аутентификации веб-сайта. Мы используем COM + для файлового ввода-вывода. И классический ASP Server.CreateObject для создания из него объекта. COM + работает как сетевая служба.
Мысли? Я не хочу предоставлять разрешение на запись ВСЕМ. Я что-то упускаю?
РЕШЕНИЕ: Вот что я сделал.
Мой веб-сайт с именем CipherDemo работал под управлением AppPoolIdentity в IIS 7.5, который можно было найти с помощью Identity IIS AppPool \ CipherDemo. Я использовал ICACLS, чтобы предоставить разрешения RW для этой папки.
а COM +, который фактически выполнял файловый ввод-вывод, работал под идентификатором сетевой службы. Когда я использовал Process Monitor для отслеживания ошибки отказа в доступе, оказалось, что сетевая служба имеет только разрешение на чтение для этой папки.
Я использовал ICACLS "имя папки" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T, чтобы предоставить доступ на запись в этой папке.
И решил это.
Я планировал, что, поскольку веб-сайт работает как CipherDemo Identity, это будет учетная запись, которая будет использоваться для доступа к файлу через COM +. Но неловко узнать, что COM + по-прежнему работает в рамках собственных границ Identity.
Вы можете добавить учетную запись через графический интерфейс NTFS, введя ее напрямую. Имя в формате IIS APPPOOL\<<app pool name>>
, например IIS APPPOOL\DefaultAppPool
. (посмотри это Статья поддержки Microsoft)
Альтернативное решение: я использовал учетную запись «Сетевая служба» в качестве пользователя пула приложений, предоставляя ей разрешение на запись.
В IIS 7.5 (и, возможно, в IIS 7) все рабочие процессы работают с идентификатором пула приложений: пользователь «IIS AppPool * PoolName *».
Предоставьте доступ этому пользователю, а не всем (вам нужно будет ввести имя в диалоговом окне выбора идентификатора - оно не будет отображаться в функции поиска).
Есть очень полезная страница на iis.net это охватывает вещи более подробно.
Также обратите внимание: в IIS7 (Server 2008):
icacls.exe
).Наконец, выбор идентификатора SQL Server также не знает об идентификаторе пула приложений: используйте CREATE LOGIN
и CREATE USER
изначально, после этого графический интерфейс можно использовать для предоставления ролей и т. д.
Если вы хотите предоставить только право ЗАПИСИ папки конкретному пользователю, вам также следует изменить «Анонимный пользовательский идентификатор» сайта на «Конкретный пользователь», а не «Идентификатор пула приложений».