программирование SQL Server и атрибуты защиты ведущего приложения
Чтобы загружать и выполнять управляемый код, ведущее приложение SQL Server должно соответствовать требованиям ведущего приложения к управлению доступом для кода и защите ресурсов ведущего приложения. Управление доступом для кода реализуется с применением одного из трех наборов разрешений SQL Server: SAFE, EXTERNAL-ACCESS или UNSAFE. В коде, выполняемом с набором разрешений SAFE или EXTERNAL-ACCESS, не рекомендуется использовать определенные типы и члены, к которым применен атрибут HostProtectionAttribute. Атрибут HostProtectionAttribute не является разрешением безопасности в той же степени, что и гарантия надежности, поскольку в нем определяются конкретные конструкции кода (типы или методы), которые ведущее приложение может запрещать. В результате применения атрибута HostProtectionAttribute в действие вводится модель программирования, которая позволяет защитить стабильность сервера.
Примечание.
Безопасность доступа к коду (CAS) устарела во всех версиях платформа .NET Framework и .NET. Последние версии .NET не учитывают заметки CAS и создают ошибки, если используются API, связанные с CAS. Разработчики должны искать альтернативные средства выполнения задач безопасности.
Атрибуты защиты сервера
Атрибуты защиты ведущего приложения определяют типы и члены, которые не соответствуют модели программирования ведущего приложения, и представляют следующие уровни угроз надежности (по возрастанию):
Во всем остальном являются безопасными.
Могут привести к дестабилизации управляемого сервером кода пользователя.
Могут привести к дестабилизации самого процесса сервера.
SQL Server не поддерживает использование типов или членов с атрибутом HostProtectionAttribute, которые задают значения HostProtectionResource, равные SharedState, Synchronization, MayLeakOnAbort или ExternalProcessMgmt. Таким образом, сборки не могут вызывать члены, которые активируют общее состояние, выполняют синхронизацию, могут привести к утечке ресурсов при завершении или влияют на целостность процесса SQL Server.
Запрещенные типы и элементы
В следующей таблице указаны типы и члены, значения HostProtectionResource которых запрещены в SQL Server.
Наборы разрешений SQL Server
SQL Server позволяет пользователям задавать требования к надежности кода, развернутого в базе данных. При загрузке сборок в базу данных разработчик сборки может задать для нее один из трех наборов разрешений: SAFE, EXTERNAL-ACCESS или UNSAFE.
Набор разрешений | SAFE | EXTERNAL-ACCESS | UNSAFE |
---|---|---|---|
Управление доступом для кода | Только выполнение | Выполнение и доступ к внешним ресурсам | С неограниченным доступом |
Ограничения модели программирования | Да | Да | Без ограничений |
Требование к проверяемости | Да | Да | Нет |
Возможность вызова машинного кода | No | No | Да |
SAFE — самый надежный и безопасный режим с соответствующими ограничениями в отношении разрешенной программной модели. Код с разрешениями SAFE имеет самый высокий уровень надежности и безопасности. Сборки SAFE получают достаточные разрешения для запуска, выполнения вычислений и доступа к локальной базе данных. Сборки SAFE должны использовать безопасные типы с возможностью проверки этого факта; они также не могут вызывать неуправляемый код.
Набор разрешений EXTERNAL-ACCESS представляет собой промежуточный вариант в контексте безопасности. Он разрешает коду доступ к внешним по отношению к базе данных ресурсам, но при этом по-прежнему обеспечивает уровень надежности и безопасности, соответствующий разрешениям SAFE.
Режим UNSAFE предназначен для кода с высоким уровнем доверия, который могут создавать только администраторы базы данных. Этот доверенный код не имеет ограничений на управление доступом к коду и может вызывать неуправляемый (машинный) код.
SQL Server использует уровень политики управления доступом к коду на уровне ведущего приложения для настройки политики ведущего приложения, которая предоставляет один из трех наборов разрешений на основе наборов, которые хранятся в каталогах SQL Server. Управляемый код, выполняемый внутри базы данных, всегда получает один из этих наборов разрешений доступа для кода.
Ограничения модели программирования
В модели программирования SQL Server должны применяться функции, процедуры и типы, которые не требуют удержания состояния для нескольких вызовов или использования общего состояния для нескольких пользовательских сеансов. Кроме того, как было описано выше, наличие общего состояния может привести к критическим исключениям, которые влияют на масштабируемость и надежность приложения.
Исходя из этого, SQL Server не поддерживает использование статических переменных и статических членов данных. Для сборок с разрешениями SAFE и EXTERNAL-ACCESS SQL Server проверяет метаданные сборки во время СОЗДАНИЯ СБОРКИ и возвращает состояние сбоя, если в ней используются статические переменные и члены данных.