Ограничения для изолированных решений
В данном разделе описываются ограничения для кода, который выполняется в для песочницы.
Дата последнего изменения: 9 марта 2015 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Тройные рабочие процессы
Маркер безопасности с низкими привилегиями для изолированного рабочего процесса
Ограничительная политика разграничения доступа кода для изолированного рабочего процесса
Специальные версии сборки Microsoft.SharePoint.dll
Система раздельной подготовки страниц
Ограничения на использование ресурсов
Проверка решений для ферм
Блокирование решений для ферм
Блокирование классов для ферм
Другие ограничения
Доступно на сайте SharePoint Online
Полезно разделить разные ограничения по следующим категориям в зависимости от механизмов, налагающих эти ограничения.
Тройные рабочие процессы
Маркер безопасности с низкими привилегиями для изолированного рабочего процесса
Ограничительная политика разграничения доступа кода для изолированного рабочего процесса
Специальные версии сборки Microsoft.SharePoint.dll
Система раздельной подготовки страниц
Ограничения на использование ресурсов
Проверка решений для ферм
Блокирование решений для ферм
Блокирование классов для ферм
Другие ограничения
Тройные рабочие процессы
Как описывается в статье Архитектура изолированных решений, изолированный код запускается в отдельном рабочем процессе из стандартного рабочего процесса Microsoft ASP.NET и вызывает третий прокси-процесс с полным доверием. Это накладывает некоторые ограничения на для песочницы, независимо от разрешений изолированного рабочего процесса.
Ограничение |
Следствия и замечания |
---|---|
Обработчик WebResources.axd, который выполняется в рабочем процессе ASP.NET, не может обращаться к ресурсам, внедренные в сборки в изолированном рабочем процессе. |
Сборки в для песочницы не могут использовать внедренные ресурсы. |
Маркер безопасности с низкими привилегиями для изолированного рабочего процесса
Изолированный рабочий процесс получает маркер безопасности с низкими привилегиями. (Он отличается от маркера безопасности пользователя.) Маркер накладывает следующие ограничения.
Ограничение |
Следствия и замечания |
||
---|---|---|---|
Код в процессе не может выполнять чтение или запись в файловой системе (за исключением чтения и выполнения сборок в глобальном кэше сборок). |
1. В для песочницы нельзя разворачивать страницы приложений, мобильные страницы и пользовательские элементы управления (ASCX-файлы). Также нельзя разворачивать визуальные веб-части, поскольку они включают пользовательский элемент управления. Замещаемые элементы управления, реализованные как пользовательские элементы управления, также недопустимы в для песочницы. Однако некоторые другие типы файлов можно разворачивать в базе данных контента и, таким образом, включать в для песочницы. К ним относятся файлы скриптов, файлы изображений и сборки. (Дополнительные сведения см. в статьях How to: Create and Deploy a non-RESX Resources in a Sandboxed Solution и Где развертываются сборки изолированных решений?)
2. Для определений сайта требуется файл WebTemp*.xml, поэтому их нельзя развертывать в для песочницы. Однако в для песочницы можно развернуть настраиваемые типы сайтов с помощью элемента WebTemplate вместо файла WebTemp*.xml. Дополнительные сведения см. в статье How to: Deploy a Web Template in a Sandboxed Solution. 3. В для песочницы нельзя разворачивать файлы ресурсов (RESX-файлы), однако имеются способы локализации для песочницы, не предусматривающие развертывания файлов ресурсов в файловой системе сервера. Дополнительные сведения см. в статье Локализация изолированных решений. 4. В для песочницы нельзя разворачивать или изменять файлы Web.config. То же относится и к дополнительным CONFIG-файлам. Дополнительные сведения см. в статье Создание дополнительного CONFIG-файла. Учитывая недоступность класса SPWebConfigModification (см. ниже в этом разделе), это означает, что в для песочницы нельзя менять параметры web.config. |
||
Код в процессе не может обращаться к сети. |
Обращаться можно только к ресурсам, доступным на сервере, на котором выполняется изолированный рабочий процесс. Работать, например, с внешней базой данных нельзя. Это значит, что в для песочницы нельзя развернуть модель BCS. |
||
Код в процессе не может выполнять запись в реестр. |
|||
Код в процессе не может вызывать сборки, развернутые вне глобального кэша сборок. (Исключение составляют сборки, развернутые в составе для песочницы. Дополнительные сведения см. в статье Где развертываются сборки изолированных решений?) |
Сборки Microsoft SharePoint Foundation и SharePoint Server, не установленные в глобальном кэше сборок, не могут вызываться кодом, который выполняется в изолированном рабочем процессе. Например, нельзя вызвать сборку Microsoft.SharePoint.UserCode.dll. |
Важно! |
---|
Маркер безопасности изолированного рабочего процесса не применяется к вызовам программных интерфейсов в Microsoft.SharePoint.dll, поскольку такие программные интерфейсы выполняются в отдельном процессе с полным доверием. Например, тот факт, что маркер безопасности для изолированного рабочего процесса блокирует доступ к внешним базам данных, не означает, что для песочницы не может обращаться к внешнему списку на веб-сайте SharePoint. Он также не блокирует доступ к стандартному списку SharePoint, когда база данных контента находится на сервере, отличном от сервера, на котором обрабатывается для песочницы. Дополнительные сведения см. в статье Архитектура изолированных решений. |
Ограничительная политика разграничения доступа кода для изолированного рабочего процесса
Политика разграничения доступа кода для рабочего процесса для песочницы определяется в файле %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\wss_usercode.config, и на нее указывается ссылка в файле web.config, расположенном в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode. Эта политика предоставляет только разрешения из следующей таблицы.
Предоставляемое разрешение |
Заметки |
---|---|
Однако не каждый класс в объектной модели доступен из изолированного кода. См. раздел Специальные версии сборки Microsoft.SharePoint.dll далее. |
|
SecurityPermission.Execution (Возможно, на английском языке) |
|
AspNetHostingPermission = Minimal (Возможно, на английском языке) |
Минимальный уровень разрешений предоставляет возможность использования ресурсов, но не дает для ресурсов прав на чтение и запись или каких-либо других прав. Вызовы к неуправляемому коду запрещены. |
В следующей таблице приведены разрешения, которые не предоставляются политикой разграничения доступа кода.
Непредоставляемое разрешение |
Заметки |
||
---|---|---|---|
Отсутствие этого разрешения запрещает доступ изолированного кода к файловой системе для чтения и записи. Это же право блокируется маркером безопасности изолированного рабочего процесса. |
|||
Отсутствие этого разрешения запрещает доступ изолированного кода к программным интерфейсам ASP.NET Reflection и, соответственно, к не общим классам и членам в управляемом коде. |
|||
Отсутствие этого разрешения запрещает доступ изолированного кода к реестру. Это же право блокируется маркером безопасности изолированного рабочего процесса. |
|||
Отсутствие этого разрешения запрещает доступ изолированного кода к неуправляемому коду и подсистемам доменов приложений и потоков. Отсутствие этого разрешения также усложняет обход ограничений политики разграничения доступа кода для вредоносного кода. |
|||
Отсутствие этого разрешения означает, что код в для песочницы не может обращаться к базам данных SharePoint. Исключение составляет код, обращающийся к сборке Microsoft.SharePoint.dll, который может получать доступ к базам данных, если это разрешено в специальных версиях данной сборки. Дополнительные сведения об этих специальных сборках и их роли см. в разделе Специальные версии сборки Microsoft.SharePoint.dll далее.
|
|||
Дополнительные сведения о политиках разграничения доступа кода см. в статьях, посвященных использованию разграничения доступа кода в ASP.NET (Возможно, на английском языке), правилам безопасности для .NET Framework 2.0 (Возможно, на английском языке) и практическому разграничению доступа кода (Возможно, на английском языке).
Важно! |
---|
Политика разграничения доступа кода для изолированного рабочего процесса не применяется к вызовам программных интерфейсов из Microsoft.SharePoint.dll, поскольку эти программные интерфейсы выполняются в отдельном процессе с полным доверием. Например, вызов GetLocalizedString может выполнять чтение из файлов ресурсов в файловой системе. Дополнительные сведения см. в статье Архитектура изолированных решений. |
Примечание |
---|
Политика разграничения доступа кода имеет исключение для сборок Microsoft Office со строгими именами. Они получают полное доверие. |
Невозможность вызова сборок без атрибута AllowPartiallyTrustedCallers
Политика разграничения доступа кода, которая дает неполное доверие коду в изолированном рабочем процессе, обладает важным дополнительным свойством, независимо от деталей самой политики: код, регулируемый такой политикой, может вызывать только сборки с атрибутом AllowPartiallyTrustedCallersAttribute. Поэтому код в изолированном рабочем процессе не может вызывать никакие сборки без данного атрибута, включая Microsoft .NET Framework, SharePoint Foundation и SharePoint Server. В следующей таблице представлены некоторые следствия данного ограничения.
Сборка без атрибута AllowPartiallyTrustedCallers |
Следствия и замечания |
---|---|
Microsoft.SharePoint.WorkflowActions |
Кодовые рабочие процессы нельзя развернуть в для песочницы, поскольку им требуется доступ к классам в этой сборке. ("Бескодовые" рабочие процессы, созданные в Microsoft SharePoint Designer и с возможными изменениями в Visual Studio, могут разворачиваться в для песочницы.) |
Список доступных и недоступных сборок .NET Framework и SharePoint см. в статьях Сведения о доступности сборок .NET из изолированных решений и Доступные и недоступные сборки SharePoint из изолированных решений.
Специальные версии сборки Microsoft.SharePoint.dll
Как описывается в статье Архитектура изолированных решений, вызовы из кода в изолированном рабочем процессе к сборке Microsoft.SharePoint.dll направляются к специальной версии этой сборки. Специальная версия в некотором отношении имеет меньше привилегий, чем другие сборки в изолированном рабочем процессе, но в остальном этих привилегий оказывается больше.
Самым важным ограничением является то, что специальная версия содержит только подмножество стандартных классов и методов сборки. Когда код вызывает программный интерфейс, не включенный в специальную версию сборки, происходит исключение. В следующей таблице указаны некоторые программные интерфейсы, не включенные в специальную версию сборки. Полный список включенных классов см. в статье Программные интерфейсы Microsoft.SharePoint.dll, доступные из изолированных решений.
Заблокированный программный интерфейс |
Следствия и замечания |
---|---|
Большая часть пространства имен Microsoft.SharePoint.Administration, включая классы SPWebApplication и SPFarm. |
1. Компоненты в для песочницы нельзя разворачивать с областью действия Ферма или Веб-приложение. Поэтому компоненты, которые можно разворачивать только с такими областями действия, нельзя разворачивать в для песочницы совсем. Например, в для песочницы нельзя развернуть модель подключения к бизнес-данным. 2. Практически никакие объекты и ресурсы выше уровня семейства веб-сайтов в объектной модели недоступны в для песочницы. 3. Конвертеры документов, зарегистрированные для веб-приложения, нельзя зарегистрировать в для песочницы. |
Все классы элементов управления в пространстве имен Microsoft.SharePoint.WebControls. |
Код в изолированных решениях ограничен элементами управления ASP.NET. |
Класс WebPartMobileAdapter. |
Изолированный код не может содержать мобильный адаптер веб-части. |
Изолированные решения могут включать только веб-части, производные от класса System.Web.UI.WebControls.WebParts.WebPart в ASP.NET. |
|
В для песочницы нельзя включать задания таймера. |
|
Изменять параметры web.config программным способом в для песочницы нельзя. Учитывая, что для песочницы не могут выполнять запись и чтение в файловой системе сервера (см. выше), это означает, что изменять параметры web.config в для песочницы нельзя. |
|
Методы в для песочницы нельзя настроить для запуска в повышенными привилегиями для учетных данных пользователя, с которыми работает пул приложений. |
Кроме того, даже если метод включен в специальную версию сборки, она может налагать дополнительные ограничения на параметры, передаваемые в программный интерфейс. Например, конструкторы SPSite(String) и SPSite(Guid) доступны в для песочницы, но в них можно передавать только URL-адреса и GUID-идентификаторы, указывающие на семейство веб-сайтов, в котором установлено для песочницы. Это не позволяет для песочницы обращаться к каким-либо веб-сайтам, спискам и другим ресурсам, находящимся за пределами семейства веб-сайтов, в котором оно было установлено.
Но вызовы к Microsoft.SharePoint.dll, разрешенные привратником специальной сборки, по сравнению с вызовами к другим сборкам имеют больше привилегий в одном важном отношении: вызываемый программный интерфейс не выполняется в ограниченном изолированном рабочем процессе. Вместо этого вызов направляется в прокси-процесс с полным доверием, где программный интерфейс выполняется без ограничений. Это означает, что такие вызовы могут, например, обращаться к базам данных SharePoint, чего не могут делать вызовы к другим сборкам, даже к другим сборкам SharePoint.
Система раздельной подготовки страниц
Как описывается в статье Архитектура изолированных решений, когда клиентский компьютер запрашивает страницу SharePoint, которая включает компонент из для песочницы, например веб-часть, развернутую в для песочницы, SharePoint подготавливает более одного объекта страницы. Один подготавливается в рабочем процессе ASP.NET (w3wp.exe), а остальные — в изолированном рабочем процессе. Все неизолированные компоненты подготавливаются на странице в рабочем процессе ASP.NET, а первый изолированный компонент подготавливается в объекте страницы в изолированном рабочем процессе. После завершения подготовки страницы в изолированном рабочем процессе она объединяется с объектом страницы в процессе ASP.NET. Если на запрошенной пользователем странице имеется несколько изолированных компонентов, каждый из них подготавливается отдельно в своем собственном объекте страницы в изолированном рабочем процессе. Каждый такой объект страницы в свою очередь объединяется с объектом страницы в процессе ASP.NET.
Одним из следствий такой системы является то, что развернутая в для песочницы веб-часть не может быть ни веб-частью поставщика, ни потребителя в подключении веб-части. Это происходит, поскольку каждая изолированная веб-часть подготавливается полностью в отдельном объекте страницы. (Подключения веб-частей между страницами возможны для веб-частей, производных от класса Microsoft.SharePoint.WebPartPages.WebPart, однако этот класс блокируется оболочкой совместимости Microsoft.SharePoint.dll (см. выше). В для песочницы поддерживаются только веб-части, производные от класса System.Web.UI.WebControls.WebParts.WebPart, и для них не разрешены подключения веб-частей между страницами).
Существует и другое следствие использования системы раздельной подготовки страниц. Некоторые типы ASP.NET нельзя объединять из объекта страницы в изолированном процессе в окончательную возвращаемую страницу. Это означает, что для кода в для песочницы нет смысла выполнять запись в свойства объекта ASP.NET Page (или его дочерних объектов), которые содержат объекты таких не допускающих объединения типов. В следующей таблице указаны некоторые такие типы.
Не допускающий объединения тип |
Следствия и замечания |
---|---|
Изолированный код не должен выполнять запись в свойство ClientScript. Однако зарегистрировать на странице клиентский скрипт можно другими способами. Например, можно встроить скрипт в виде элемента управления LiteralControl и добавить его в коллекцию элементов управления в методе CreateChildControls(). |
|
Изолированный код не должен добавлять объект ScriptManager в коллекцию элементов управления какого-либо объекта. |
|
Изолированный код не должен выполнять запись в свойство Cache. |
|
Изолированный код не должен выполнять запись в свойство Master. Однако он может направлять страницу на другую главную страницу путем записи соответствующего значения в свойство MasterPageFile. |
|
Изолированный код не должен выполнять запись в свойство Session. |
Ограничения на использование ресурсов
Изолированные решения не могут чрезмерно использовать системные ресурсы. Выполнение этого требования обеспечивается инфраструктурой отслеживания ресурсов SharePoint Foundation.
Дополнительные сведения см. в статьях Ограничения на использование ресурсов для изолированных решений и Архитектура изолированных решений.
Проверка решений для ферм
Как описывается в статье Solution Validation System, администраторы ферм могут проводить пользовательскую проверку решения для для песочницы. Это может приводить к определению дополнительных ограничений на диапазон действий, допустимых для для песочницы. Список используемых средств проверки можно узнать у администраторов ферм.
Блокирование решений для ферм
Администраторы ферм могут поместить любое для песочницы в список заблокированных решений в центре администрирования.
Блокирование классов для ферм
Администраторы ферм могут выполнять пользовательский код, который запрещает вызов указанных управляемых классов из изолированного рабочего процесса. Дополнительные сведения см. в статье SPRestrictedObjectModel.
Другие ограничения
В следующей таблице приведены ограничения для для песочницы, которые нельзя отнести к другим разделам данной статьи.
Ограничение |
Следствия и замечания |
---|---|
В для песочницы нельзя разворачивать элемент HideCustomAction. |
С помощью для песочницы нельзя скрыть элемент меню, кнопку ленты или ссылку на странице администрирования, например на странице Параметры сайта. Однако с помощью для песочницыможно добавить новое пользовательское действие для этих объектов. Дополнительные сведения см. в статье Что можно реализовать в изолированном решении. |
В для песочницы нельзя разворачивать элемент CustomActionGroup. |
Несмотря на то, что в для песочницы можно добавить новое пользовательское действие, для пользовательских действий нельзя создать новую группу действий. Дополнительные сведения см. в статье Что можно реализовать в изолированном решении. |
В для песочницы нельзя зарегистрировать вариант элемента управления для замещаемого элемента управления (элемент Control). |
См. также
Концепции
Что можно реализовать в изолированном решении