Конструирование сборок
Область применения: SQL Server
В этом подразделе описываются факторы, которые следует принять во внимание при конструировании сборок:
компоновка сборок;
управление безопасностью сборок;
ограничения на сборки.
Компоновка сборок
Сборка может содержать функции для нескольких подпрограмм SQL Server или ввести их классы и методы. В большинстве случаев имеет смысл компоновать в одну сборку функциональность подпрограмм, выполняющих связанные функции, особенно если данные подпрограммы относятся к классам, методы которых вызывают друг друга. Например, классы, выполняющие задачи по управлению вводом данных для триггеров и хранимых процедур среды CLR, могут быть скомпонованы в одной сборке. Это связано с тем, что методы данных классов с большей вероятностью будут вызывать друг друга, а не методы менее связных задач.
При компоновке кода в сборку надо учитывать следующее.
Определяемые пользователем типы данных CLR и индексы, зависящие от определяемых пользователем функций среды CLR, могут вызвать появление в базе данных материализованных данных, зависящих от сборки. Часто изменение кода сборки является более сложным, если в базе данных присутствуют материализованные данные, зависящие от сборки. Таким образом, в общем случае лучше отделять код, от которого зависят материализованные данные (такие как определяемые пользователем типы и индексы, использующие определяемые пользователем функции), от кода, от которого не зависят никакие материализованные данные. Дополнительные сведения см. в разделе "Реализация сборок" и ALTER ASSEMBLY (Transact-SQL).
Если часть управляемого кода требует разрешения более высокого уровня, лучше поместить данный код в отдельную сборку, отдельно от кода, не требующего этого разрешения.
Управление безопасностью сборок
Можно управлять доступом сборки к ресурсам, защищенным системой безопасности доступа к коду платформы .NET, когда она выполняет управляемый код. Для этого необходимо указать один из трех наборов разрешений при создании или изменении сборки: SAFE, EXTERNAL_ACCESS или UNSAFE.
SAFE
Набор SAFE является набором разрешений по умолчанию и наиболее ограничен. Код, выполняемый в сборке с набором разрешений SAFE, не может получить доступ к внешним системным ресурсам, таким как файлы, сеть, переменные среды или реестр. Безопасный код может получить доступ к данным из локальных баз данных SQL Server или выполнять вычисления и бизнес-логику, не связанные с доступом к ресурсам за пределами локальных баз данных.
Большинство сборок выполняют задачи вычислений и управления данными без доступа к ресурсам за пределами SQL Server. Таким образом, набор SAFE рекомендуется в качестве набора разрешений для сборки.
EXTERNAL_ACCESS
Набор EXTERNAL_ACCESS позволяет сборкам получать доступ к определенным внешним системным ресурсам, таким как файлы, сети, веб-службы, переменные среды и реестр. Только имена входа SQL Server с разрешениями EXTERNAL ACCESS могут создавать EXTERNAL_ACCESS сборки.
Сборки с наборами SAFE и EXTERNAL_ACCESS могут содержать только код, который является проверяемым типизированным кодом. Это означает, что данные сборки могут получать доступ к классам только через правильно определенные точки входа, доступные для определения типа. Таким образом, они не могут произвольно обращаться к буферам памяти, не принадлежащим коду. Кроме того, они не могут выполнять операции, которые могут негативно повлиять на надежность процесса SQL Server.
UNSAFE
UNSAFE предоставляет сборкам неограниченный доступ к ресурсам как внутри, так и за пределами SQL Server. Код, выполняемый в сборке с набором разрешений UNSAFE, может вызвать неуправляемый код.
Кроме того, выбор набора UNSAFE позволяет коду в сборке выполнять операции, которые рассматриваются средством проверки среды CLR как нетипичные. Эти операции могут получить доступ к буферам памяти в пространстве обработки SQL Server неконтролируемым образом. Сборки UNSAFE также могут подорвать систему безопасности SQL Server или среды CLR. Разрешения UNSAFE должны предоставляться только высоконадежным сборкам опытными разработчиками или администраторами. Только члены предопределенной роли сервера sysadmin могут создавать сборки UNSAFE.
Ограничения на сборки
SQL Server помещает определенные ограничения в управляемый код в сборки, чтобы убедиться, что они могут работать надежно и масштабируемо. Это означает, что некоторые операции, способные нарушить устойчивость сервера, не разрешены в сборках с набором разрешений SAFE и 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.STAThreadAttribute
System.ThreadStaticAttribute
Кроме того, сборки с набором разрешений SAFE и EXTERNAL_ACCESS не могут иметь следующих пользовательских атрибутов.
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
Неразрешенные API-интерфейсы платформы .NET Framework
Любой API платформа .NET Framework Майкрософт, помеченный одним из запрещенных hostProtectionAttributes, не может вызываться из сборок SAFE и EXTERNAL_ACCESS.
eSelfAffectingProcessMgmt
eSelfAffectingThreading
eSynchronization
eSharedState
eExternalProcessMgmt
eExternalThreading
eSecurityInfrastructure
eMayLeakOnAbort
eUI
Поддержка сборок платформы .NET Framework
Любая сборка, на которую ссылается пользовательская сборка, должна быть загружена в SQL Server с помощью CREATE ASSEMBLY. Следующие платформа .NET Framework сборки уже загружаются в SQL Server и, следовательно, можно ссылаться на пользовательские сборки без необходимости использовать CREATE ASSEMBLY.
CustomMarshalers.dll
Microsoft.VisualBasic.dll
Microsoft.VisualC.dll
mscorlib.dll
System.dll
System.Configuration.dll
System.Core.dll
System.Data.dll
System.Data.OracleClient.dll
System.Data.SqlXml.dll
System.Deployment.dll
System.Security.dll
System.Transactions.dll
System.Web.Services.dll
system.Xml.dll
System.Xml.Linq.dll
См. также
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру