CREATE EXTERNAL LANGUAGE (Transact-SQL)

Область применения: SQL Server 2019 (15.x) и более поздних версий

Регистрирует расширения внешнего языка в базе данных из заданного пути файла или байтового потока. Это утверждение является универсальным механизмом, позволяющим администратору базы данных регистрировать новые внешние языковые расширения на любой платформе ОС, поддерживаемой SQL Server. См подробнее о расширениях языка.

Примечание.

R и Python — это зарезервированные имена. Нельзя создать внешний язык с такими конкретными именами. См. подробнее об использовании R и Python в документации по Службам машинного обучения SQL Server.

Синтаксис

CREATE EXTERNAL LANGUAGE language_name  
[ AUTHORIZATION owner_name ]  
FROM <file_spec> [ ,...2 ]  
[ ; ]  

<file_spec> ::=  
{
    ( CONTENT = { <external_lang_specifier> | <content_bits> },
    FILE_NAME = <external_lang_file_name>
    [ , PLATFORM = <platform> ]
    [ , PARAMETERS = <external_lang_parameters> ]
    [ , ENVIRONMENT_VARIABLES = <external_lang_env_variables> ] )
}

<external_lang_specifier> :: =  
{
    '[file_path\]os_file_name'  
}

<content_bits> :: =  
{
    varbinary_literal
    | varbinary_expression
}

<external_lang_file_name> :: =  
'extension_file_name'


<platform> :: =
{
    WINDOWS
  | LINUX
}

<external_lang_parameters> :: =  
'extension_specific_parameters'

Аргументы

language_name

Языки — это объекты, охватывающие базу данных. Имена языков должны быть уникальными в пределах базы данных.

owner_name

Указывает имя пользователя или роли, которым принадлежит внешний язык. Если вы не указываете значение, текущий пользователь становится владельцем. В зависимости от разрешений другим пользователям может потребоваться явное разрешение для выполнения скриптов на определённом языке.

file_spec

Указывает содержимое расширения языка. Для конкретного языка на каждой платформе разрешен только один <file_spec> язык.

external_lang_specifier

Полный путь файла к файлу .zip или tar.gz, содержащему код расширения. Этот контент может быть либо путь к .zip-файлу (на Windows), либо tar.gz-файл (на Linux).

content_bits

Указывает содержимое языка в виде шестнадцатеричного литерала, аналогично сборкам.

Используйте эту опцию, когда серверная файловая система ограничена и вы не можете скопировать файлы библиотеки в место, к которому сервер может получить доступ. Для создания или изменения языка необходимо иметь необходимые разрешения.

external_lang_file_name

Имя файла расширения DLL или SO. Название указывает на правильный файл, когда в <external_lang_specifier> .zip или tar.gz существует несколько файлов .dll или .so.

external_lang_parameters

Задаёт набор параметров для передачи во внешний языковой режим. Внешняя среда выполнения получает значения параметров после запуска внешнего процесса. Переменные среды, напротив, становятся доступными для расширения языка до начала внешнего процесса.

external_lang_env_variables

Задаёт набор переменных среды, которые должны быть доступны для внешнего языка перед началом внешнего процесса. Например, установите главную папку самого runtime, например JRE_HOME.

platform

Этот параметр необходим для гибридных сценариев операционной системы. В гибридной архитектуре язык нужно регистрировать один раз на платформу. Если вы не указываете платформу, SQL Server предполагает текущую ОС.

Разрешения

Требуется разрешение CREATE EXTERNAL LANGUAGE. По умолчанию любой участник роли db_owner фиксированной базы данных имеет права на создание внешнего языка. Для всех остальных пользователей вы должны явно предоставить разрешение, используя GRANT оператор, указывающий CREATE EXTERNAL LANGUAGE это право в качестве права.

Чтобы изменить библиотеку, требуется отдельное разрешение, ALTER ANY EXTERNAL LANGUAGE.

Разрешение EXECUTE EXTERNAL SCRIPT

Используйте EXECUTE EXTERNAL SCRIPT разрешения для предоставления внешнего выполнения скриптов на конкретных языках. EXECUTE EXTERNAL SCRIPT отличается от EXECUTE ANY EXTERNAL SCRIPT разрешения базы данных, которые не позволяют предоставлять разрешение на выполнение на конкретном языке.

Предоставление пользователям, не работающим с DBO , разрешение на выполнение определённого языка:

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::language_name
TO database_principal_name;

Ссылочные разрешения на внешние библиотеки

Подобно ассемблям, внешние языки требуют разрешения на ссылки, чтобы была связь между внешними библиотеками и внешними языками. Например, прежде чем отказаться от внешнего языка, нужно убрать все внешние библиотеки, которые на него ссылаются. Рассматривайте внешний язык как объект более высокого уровня, чем внешние библиотеки в иерархии.

Примеры

А. Создание внешнего языка в базе данных

Следующий пример добавляет внешний язык Java в базу данных на сервере SQL Server в Windows.

CREATE EXTERNAL LANGUAGE Java 
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO

B. Создание внешнего языка одновременно для Windows и Linux

Вы можете указать два параметра <file_spec>: один для Windows, а другой для Linux.

CREATE EXTERNAL LANGUAGE Java
FROM
(CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll', PLATFORM = WINDOWS),
(CONTENT = N'<path-to-tar.gz>', FILE_NAME = 'javaextension.so', PLATFORM = LINUX);
GO

В. Предоставление разрешений на выполнение внешнего скрипта

В приведенном ниже примере субъекту mylogin предоставляется доступ для выполнения скрипта с использованием внешнего языка Java.

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::Java 
TO mylogin;