System.Security.SecurityException, когда виртуальный каталог указывает на удаленный общий ресурс в ASP.NET

Эта статья поможет устранить проблему, которая System.Security.SecurityException может возникнуть при использовании виртуального каталога, который указывает на удаленный общий ресурс для размещения Microsoft ASP. Приложение на основе NET.

Исходная версия продукта: ASP.NET
Исходный номер базы знаний: 320268

Симптомы

При использовании виртуального каталога, который указывает на удаленный общий ресурс для размещения ASP. Приложение на основе NET может получить сообщение об ошибке, похожее на один из следующих примеров:

  • Сообщение 1

    Описание исключения безопасности. Приложение попыталось выполнить операцию, не разрешенную политикой безопасности. Чтобы предоставить этому приложению необходимое разрешение, обратитесь к системному администратору или измените уровень доверия приложения в файле конфигурации.
    Сведения об исключении: System.Security.SecurityException: ошибка безопасности.
    Ошибка источника:
    Строка 30: частный статический логический __intialized = false; Строка 31: Строка 32: public Global_asax() { Строка 33: if ((ASP. Global_asax.__intialized == false)) { Строка 34: ASP. Global_asax.__intialized = true;

  • Сообщение 2

    Ошибка сервера в приложении /ApplicationName.
    Описание ошибки средства синтаксического анализа. Произошла ошибка при синтаксическом анализе ресурса, необходимого для обслуживания этого запроса. Просмотрите следующие сведения об ошибке синтаксического анализа и измените исходный файл соответствующим образом.
    Сообщение об ошибке средства синтаксического анализа: не удалось загрузить тип ApplicationName.Global.
    Ошибка источника: строка 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Исходный файл: путь к Application\global.asax line: 1

Причина

К System.Web пространству AllowPartiallyTrustedCallersAttribute имен не применяется . Дополнительные сведения см. в статье Шаблоны & методики.

Для любого кода, который не входит в группу кода My_Computer_Zone без этого атрибута, требуется право пользователя FullTrust . Поэтому для удаленной общей папки, содержащей содержимое веб-приложений, требуется FullTrust.

Разрешение

Чтобы устранить эту проблему, предоставьте право FullTrust удаленной общей папке:

  1. На веб-сервере откройте администрирование, а затем дважды щелкните Microsoft платформа .NET Framework Configuration.

  2. Разверните узел Политика безопасности среды выполнения, Компьютер, а затем — Группы кода.

  3. Щелкните правой кнопкой мыши All_Code и выберите Создать.

  4. Выберите пункт Создать новую группу кода. Присвойте группе кода соответствующее имя, например имя общей папки приложений. Нажмите кнопку Далее.

  5. В списке Выберите тип условия для этой группы кода выберите URL-адрес.

  6. В поле URL-адрес введите путь к общей папке в следующем формате:
    file:////\\computername\\sharename\*

    Примечание.

    Замените computername именем компьютера, на котором размещен удаленный общий ресурс. Замените sharename именем общей папки.

  7. Нажмите кнопку Далее. На следующей странице выберите Использовать существующий набор разрешений, а затем выберите FullTrust.

  8. Нажмите кнопку Далее и нажмите кнопку Готово.

  9. Перезапустите службы IIS, чтобы перезапустить рабочий процесс ASP.NET.

Если конфигурация Microsoft платформа .NET Framework не отображается в разделе Администрирование, можно установить пакет SDK для платформа .NET Framework, чтобы добавить конфигурацию Microsoft платформа .NET Framework. Вместо этого можно выполнить следующую команду, чтобы внести изменения:

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

Чтобы получить дополнительные сведения о том, что делают эти аргументы, выполните следующую команду:

caspol.exe -?

Статус

Такое поведение является особенностью данного продукта.

Дополнительная информация

В этой конфигурации учетная запись, под которой выполняется рабочий процесс ASP.NET, должна иметь достаточные права на удаленный общий ресурс. Вы можете задать учетную запись, под которой выполняется рабочий процесс, с помощью тега <processmodel> в файлеMachine.config .

Действия по воспроизведению поведения

  1. Создайте виртуальный каталог, указывающий на удаленный общий ресурс.
  2. Создайте приложение для виртуального каталога. Убедитесь, что пользователь, который подключается к общей папке, имеет доступ на чтение удаленного содержимого.
  3. В теге <processmodel> файлаMachine.config измените пользователя на пользователя домена, имеющего разрешения на список, чтение и выполнение в удаленной общей папке.
  4. Создайте встроенный файл .aspx, а затем поместите его в удаленный общий ресурс.
  5. Сделайте запрос на страницу.

Ссылки

Дополнительные сведения о разрешениях, необходимых учетной записи ASPNET для запуска ASP.NET приложений, см. в статье Общие сведения о ASP.NET удостоверений. Дополнительные сведения о безопасности ASP.NET см. в разделе INFO: ASP.NET Обзор безопасности.