2011-09-13 2 views
2

Я следующий код (from msdn), чтобы установить права доступа к файлам:Изменение прав доступа к файлам приводит IdentityNotMappedException (когда код работал на веб-сервере)

' Adds an ACL entry on the specified file for the specified account. 
Sub AddFileSecurity(ByVal fileName As String, ByVal account As String, ByVal rights As FileSystemRights, ByVal controlType As AccessControlType) 

    ' Get a FileSecurity object that represents the 
    ' current security settings. 
    Dim fSecurity As FileSecurity = File.GetAccessControl(fileName) 

    ' Add the FileSystemAccessRule to the security settings. 
    Dim accessRule As FileSystemAccessRule = New FileSystemAccessRule(account, rights, controlType) 

    fSecurity.AddAccessRule(accessRule) 

    ' Set the new access settings. 
    File.SetAccessControl(fileName, fSecurity) 

End Sub 

Я называю это с помощью группы IIS_IUSRS (я пробовал ComputerName/IIS_IUSRS тоже), и я пытаюсь применить FileSystemRights.FullControl

Но результаты этой ошибки:

System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated 

Что означает, что IIS_IUSRS не существует (он делает). Мой следующий шаг - вывести пользователей и группы на машине, чтобы увидеть, что мой код действительно существует. В то же время кто-нибудь знает, почему, или что вызывает это?

Этот код отлично работает на моей локальной машине, но не при запуске на моем веб-сервере. Пул приложений работает как сетевой сервис, а Network Server имеет ПОЛНОЕ разрешение на папку, в которой находятся файлы. Я заметил, что this question предлагает, чтобы пользователю было необходимо разрешение в каталоге, но это не проблема.

ответ

0

Чтобы обойти это, измените аутентификацию на веб-сайте, чтобы она выполнялась как «То же, что и в пуле приложений» (в отличие от анонимного). Не лучший ответ, но попробовали все остальное.