Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возможность загружать и выполнять управляемый код на узле 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.
Набор разрешений | БЕЗОПАСНЫЙ | EXTERNAL-ACCESS | ОПАСНЫЙ |
---|---|---|---|
Безопасность доступа к коду | Только выполнение | Выполнение и доступ к внешним ресурсам | Неограниченный |
Ограничения модели программирования | Да | Да | Ограничения отсутствуют |
Требование к проверяемости | Да | Да | нет |
Возможность вызова машинного кода | нет | нет | Да |
SAFE — самый надежный и безопасный режим с соответствующими ограничениями в отношении разрешенной программной модели. Безопасный код имеет высокий уровень надежности и функций безопасности. Сборки SAFE получают достаточные разрешения для запуска, выполнения вычислений и доступа к локальной базе данных. Сборки SAFE должны использовать безопасные типы с возможностью проверки этого факта; они также не могут вызывать неуправляемый код.
EXTERNAL-ACCESS предоставляет промежуточный параметр безопасности, позволяя коду получать доступ к ресурсам вне базы данных, но по-прежнему имеет надежность и безопасность SAFE.
Режим UNSAFE предназначен для кода с высоким уровнем доверия, который могут создавать только администраторы базы данных. Этот доверенный код не имеет ограничений на доступ к коду, и он может вызывать неуправляемый (машинный) код.
SQL Server использует уровень политики безопасности доступа к коду на уровне узла для настройки политики узла, которая предоставляет один из трех наборов разрешений на основе набора разрешений, хранящегося в каталогах SQL Server. Управляемый код, выполняемый внутри базы данных, всегда получает один из этих наборов разрешений доступа для кода.
Ограничения модели программирования
Модель программирования для управляемого кода в SQL Server требует функций, процедур и типов, которые не требуют сохранения состояния между несколькими вызовами или совместного использования состояния в нескольких пользовательских сеансах. Кроме того, как было описано выше, наличие общего состояния может привести к критическим исключениям, которые влияют на масштабируемость и надежность приложения.
Учитывая эти рекомендации, SQL Server запрещает использование статических переменных и статических элементов данных. Для сборок SAFE и EXTERNAL-ACCESS SQL Server проверяет метаданные сборки во время выполнения команды CREATE ASSEMBLY и не удается создать такие сборки, если он находит использование статических членов данных и переменных.