Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Applies to:SQL Server
Azure SQL Managed Instance
При создании управляемой хранимой процедуры или другого объекта управляемой базы данных SQL Server выполняет определенные проверки кода, которые необходимо учитывать. Эти проверки выполняются в сборке управляемого кода при первой регистрации в базе данных с помощью CREATE ASSEMBLY
инструкции, а также во время выполнения. Управляемый код также проверяется во время выполнения, так как в сборке могут быть пути кода, которые никогда не могут быть достигнуты во время выполнения.
These code checks provide flexibility for registering third-party assemblies especially, so that an assembly isn't blocked where there's unsafe code designed to run in a client environment, but would never be executed in the hosted common language runtime (CLR). Требования, которые должен соответствовать управляемому коду, зависят от того, зарегистрирована ли сборка как SAFE
, EXTERNAL_ACCESS
или UNSAFE
.
SAFE
является самым строгим уровнем безопасности.
Кроме ограничений, которые распространяются на сборки управляемого кода, им также предоставляются права доступа к коду. Среда CLR поддерживает модель безопасности, называемую управлением доступом для кода (CAS). В этой модели разрешения предоставляются сборкам на основе идентификатора кода. Сборки SAFE
, EXTERNAL_ACCESS
и UNSAFE
имеют различные разрешения CAS. Дополнительные сведения см. в разделе безопасности доступа к коду интеграции CLR.
If the publisher policy is set, CREATE ASSEMBLY
fails.
Безопасность доступа к коду больше не поддерживается
Среда CLR использует управление доступом для кода (CAS) в .NET Framework, которое больше не поддерживается в качестве границы безопасности. Сборка СРЕДЫ CLR, созданная с PERMISSION_SET = SAFE
возможностью доступа к ресурсам внешней системы, вызову неуправляемого кода и получению привилегий sysadmin. В SQL Server 2017 (14.x) и более поздних версиях sp_configure
параметр, clr strict security, повышает безопасность сборок СРЕДЫ CLR.
clr strict security
включен по умолчанию и рассматривает сборки SAFE
и EXTERNAL_ACCESS
, как если бы они были помечены UNSAFE
. Параметр clr strict security
можно отключить для обратной совместимости, но не рекомендуется.
Рекомендуется подписать все сборки сертификатом или асимметричным ключом с соответствующим именем входа, предоставленным UNSAFE ASSEMBLY
в master
базе данных. Администраторы SQL Server также могут добавлять сборки в список сборок, которым должен доверять ядро СУБД. For more information, see sys.sp_add_trusted_assembly.
Проверка СБОРКИ CREATE
При выполнении инструкции CREATE ASSEMBLY
выполняются следующие проверки для каждого уровня безопасности. Если проверка завершается ошибкой, CREATE ASSEMBLY
сообщение об ошибке завершается ошибкой.
Глобальная проверка (любой уровень безопасности)
Все сборки, на которые имеются ссылки, должны удовлетворять одному или нескольким из следующих критериев.
Сборка уже зарегистрирована в базе данных.
Сборка принадлежит к числу поддерживаемых сборок. Дополнительные сведения см. в разделе Поддерживаемые библиотеки .NET Framework.
Вы используете
CREATE ASSEMBLY FROM <location>
, а все указанные сборки и их зависимости доступны в<location>
.Вы используете
CREATE ASSEMBLY FROM <bytes ...>
, и все ссылки указываются через разделенные пробелами байты.
EXTERNAL_ACCESS
Все сборки EXTERNAL_ACCESS
должны отвечать следующим требованиям.
Статические поля не используются для хранения информации. Допускаются статические поля только для чтения.
Передается тест PEVerify. Средство PEVerify (
peverify.exe
), которое проверяет, что код общего промежуточного языка (CIL) и связанные метаданные соответствуют требованиям безопасности типа, предоставляется пакетом SDK для платформа .NET Framework.Синхронизация, например с классом
SynchronizationAttribute
, не используется.Методы завершения не используются.
В сборках EXTERNAL_ACCESS
запрещено использовать следующие настраиваемые атрибуты.
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
SAFE
- Проверяются все условия, относящиеся к сборкам
EXTERNAL_ACCESS
.
Runtime checks
Во время выполнения код сборки проверяется на соответствие ряду условий. Если обнаружены какие-либо из этих условий, управляемый код не может выполняться, и создается исключение.
UNSAFE
Невозможно загрузить сборку, явно System.Reflection.Assembly.Load()
вызвав метод из массива байтов или неявно используя Reflection.Emit
пространство имен.
EXTERNAL_ACCESS
Проверяются все условия UNSAFE
.
Не допускаются все типы и методы, помеченные следующими значениями атрибутов защиты сервера в поддерживаемом списке сборок.
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Дополнительные сведения об HPAs и списке запрещенных типов и членов в поддерживаемых сборках см. в атрибутах защиты узла и программировании интеграции CLR.
SAFE
Проверяются все условия EXTERNAL_ACCESS
.