Бөлісу құралы:


Общие сведения об интеграции со средой CLR

Область применения: SQL Server Управляемый экземпляр SQL Azure

Среда CLR является сердцем платформы Microsoft .NET Framework и предоставляет среду выполнения для всего кода .NET Framework. Код, выполняемый в среде CLR, называется управляемым кодом. Среда CLR предоставляет различные функции и услуги, требуемые для выполнения программы, включая JIT-компиляцию, распределение и управление памятью, соблюдение безопасности типов, обработку исключений, управление потоками и безопасность. Дополнительные сведения см. в пакете .NET Framework SDK.

Если среда CLR размещается в Microsoft SQL Server (что принято называть интеграцией со средой CLR), то появляется возможность разрабатывать в управляемом коде хранимые процедуры, триггеры, определяемые пользователем функции, определяемые пользователем типы и определяемые пользователем статистические функции. Из-за того, что управляемый код перед выполнением производит компиляцию в машинный код, можно достичь значительного увеличения производительности в некоторых сценариях.

В управляемом коде используется управление доступом для кода (CAS) для предотвращения выполнения сборками определенных операций. В SQL Server используется CAS для обеспечения безопасности управляемого кода и предотвращения нарушений безопасности операционной системы или сервера баз данных.

Преимущества интеграции со средой CLR

Transact-SQL специально предназначен для прямого доступа к данным и управления ими в базе данных. Хотя Transact-SQL работает на доступе к данным и управлении, он не является полноценным языком программирования. Например, Transact-SQL не поддерживает массивы, коллекции, циклы для каждого цикла, битовую смену или классы. Хотя некоторые из этих конструкций можно имитировать в Transact-SQL, управляемый код имеет встроенную поддержку этих конструкций. В зависимости от сценария эти средства могут стать убедительной причиной для внедрения в управляемый код определенных функциональных возможностей поддержки базы данных.

Microsoft Visual Basic .NET и Microsoft Visual C# предлагают объектно-ориентированные возможности, например инкапсуляцию, наследование и полиморфизм. Связанный код теперь можно легко организовать в классы и пространства имен. При работе с большими объемами серверного кода это позволяет упростить организацию и сохранение кода.

Управляемый код лучше подходит, чем Transact-SQL для вычислений и сложной логики выполнения, и предоставляет обширную поддержку для многих сложных задач, включая обработку строк и регулярные выражения. С помощью функциональных возможностей, содержащихся в библиотеке .NET Framework, обеспечивается доступ к тысячам предварительно построенных классов и подпрограмм. К ним можно легко получить доступ из любой хранимой процедуры, триггера или определяемой пользователем функции. Базовая библиотека классов (BCL) включает классы, обеспечивающие функциональные возможности управления строками, выполнения сложных математических операций, доступа к файлам, шифрования и т. д.

Примечание.

Хотя многие из этих классов могут быть использованы из кода CLR в SQL Server, те из них, которые не подходят для использования на сервере (например, классы для работы с окнами), недоступны. Дополнительные сведения см. в статье "Поддерживаемые библиотеки платформа .NET Framework".

Одним из преимуществ управляемого кода является безопасность типов, или гарантия того, что код обращается к типам только точно определенным, разрешенным способом. Перед выполнением управляемого кода среда CLR проверяет код на безопасность. Например, код проверяется для обеспечения того, что из памяти не будут считываться данные, если они не были предварительно записаны в нее. Среда CLR также гарантирует, что код не использует неуправляемую память.

Интеграция со средой CLR позволяет улучшить производительность. Дополнительные сведения см. в разделе "Производительность интеграции СРЕДЫ CLR".

Предупреждение

Среда CLR использует управление доступом для кода (CAS) в .NET Framework, которое больше не поддерживается в качестве границы безопасности. Сборки среды CLR, созданные с помощью PERMISSION_SET = SAFE, могут получать доступ к внешним системным ресурсам, вызывать неуправляемый код и получать права системного администратора. Начиная с SQL Server 2017 (14.x), sp_configure вызывается clr strict security параметр для повышения безопасности сборок СРЕДЫ CLR. clr strict security включен по умолчанию и рассматривает сборки SAFE и EXTERNAL_ACCESS, как если бы они были помечены UNSAFE. Параметр clr strict security можно отключить для обеспечения обратной совместимости, но это делать не рекомендуется. Корпорация Майкрософт рекомендует подписывать все сборки с помощью сертификата или асимметричного ключа с соответствующим именем входа, которому предоставлено разрешение UNSAFE ASSEMBLY в базе данных master. Дополнительные сведения см. в статье о параметре clr strict security.

Выбор между Transact-SQL и управляемым кодом

При написании хранимых процедур, триггеров и определяемых пользователем функций необходимо принять одно решение о том, следует ли использовать традиционный язык Transact-SQL или язык платформа .NET Framework, например Visual Basic .NET или Visual C#. Используйте Transact-SQL, если код в основном будет выполнять доступ к данным с малой или без процедурной логики. Управляемый код следует использовать для функций и процедур, интенсивно использующих ЦП, содержащих сложную логику, или при необходимости использования библиотеки BCL платформы .NET Framework.

Выбор между выполнением на сервере и выполнением на клиенте

Другой фактор в решении о том, следует ли использовать Transact-SQL или управляемый код, заключается в том, где должен находиться код, серверный компьютер или клиентский компьютер. На сервере можно запускать как Transact-SQL, так и управляемый код. Это позволяет упростить доступ к данным из кода и воспользоваться ресурсами обработки, имеющимися на сервере. С другой стороны, иногда приходится отказываться от размещения на сервере базы данных таких задач, которые интенсивно используют процессор. Современные клиентские компьютеры чаще всего являются очень мощными, поэтому может возникнуть необходимость воспользоваться их ресурсами обработки, разместив на клиенте максимально возможный объем кода. Управляемый код может выполняться на клиентском компьютере, в то время как Transact-SQL не может.

Выбор между расширенными хранимыми процедурами и управляемым кодом

Расширенные хранимые процедуры можно создать для выполнения функциональных возможностей с помощью хранимых процедур Transact-SQL. Однако расширенные хранимые процедуры могут компрометировать целостность процесса SQL Server, в то время как управляемый код, проверенный как типобезопасный, не может. Кроме того, управление памятью, планирование потоков и волокон и службы синхронизации более глубоко интегрированы между управляемым кодом среды CLR и SQL Server. Интеграция СРЕДЫ CLR обеспечивает более безопасный способ, чем расширенные хранимые процедуры для записи хранимых процедур, необходимых для выполнения задач в Transact-SQL. Дополнительные сведения об интеграции СРЕДЫ CLR и расширенных хранимых процедурах см. в разделе "Производительность интеграции СРЕДЫ CLR".

См. также

Установка платформы .NET Framework
Архитектура интеграции со средой CLR
Доступ к данным из объектов среды CLR для работы с базами данных
Приступая к работе с интеграцией со средой CLR