適用対象:SQL Server 2019 (15.x) 以降のバージョン
指定したファイル パスまたはバイト ストリームから、データベースに外部言語拡張機能を登録します。 この文は、SQL Serverがサポートする任意のOSプラットフォーム上で、データベース管理者が新しい外部言語拡張を登録するための汎用的な仕組みです。 詳細については、Language Extensions (言語拡張) に関する記事を参照してください。
Note
RとPythonは予約名です。 それらの特定の名前で外部言語を作成することはできません。 R および Python を使う方法について詳しくは、「SQL Server Machine Learning Services (SQL Server Machine Learning Services)」をご覧ください。
構文
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
言語拡張機能の内容を指定します。 特定の言語ごとに、プラットフォームごとに1つの <file_spec> しか許可されていません。
external_lang_specifier
拡張子のコードを含む .zip またはtar.gzファイルの完全なファイルパス。 このコンテンツは、Windowsでは .zip ファイルへのパス、Linuxではtar.gzファイルのいずれかです。
content_bits
アセンブリと同様に、言語の内容を 16 進数のリテラルとして指定します。
サーバーのファイルシステムが制限されていて、ライブラリファイルをサーバーがアクセスできる場所にコピーできない場合にこのオプションを使うと良いでしょう。 言語を作成または変更するには必要な権限が必要です。
external_lang_file_name
拡張機能の .dll または .so ファイルの名前です。 名前は、 <external_lang_specifier> .zipやtar.gzに複数の .dll または.soファイルが存在する場合に正しいファイルを示します。
external_lang_parameters
外部言語ランタイムに渡すパラメータのセットを指定します。 外部ランタイムは外部プロセス開始後にパラメータ値を受け取ります。 一方、環境変数は外部プロセス開始前に言語拡張にアクセス可能になります。
external_lang_env_variables
外部プロセス開始前に外部言語のランタイムに利用可能な環境変数のセットを指定します。 例えば、 JRE_HOMEのようにランタイム自体のホームディレクトリを設定します。
platform
このパラメーターは、ハイブリッド OS のシナリオに必要です。 ハイブリッドアーキテクチャでは、各プラットフォームごとに言語を一度登録する必要があります。 プラットフォームを指定しなければ、SQL Serverは現在のOSを前提とします。
アクセス許可
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;
外部ライブラリに対する参照アクセス許可
アセンブリと同様に、外部言語も参照権限を必要とし、外部ライブラリと外部言語の間にリンクが必要です。 例えば、外部言語をドロップする前に、それを参照するすべての外部ライブラリを削除しなければなりません。 外部言語を階層内の外部ライブラリよりも上位のオブジェクトとして捉えてください。
例
A. データベース内の外部言語を作成する
次の例では、Windows 上の SQL Server のデータベースに、Java という名前の外部言語を追加します。
CREATE EXTERNAL LANGUAGE Java
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO
B. Windows と Linux の両方に外部言語を作成する
最大 2 つの <file_spec> を指定できます。1 つは Windows 用、1 つは 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
C. 外部スクリプトを実行するアクセス許可を付与する
次の例では、mylogin プリンシパルに、Java 外部言語を使用してスクリプトを実行するアクセス権を付与します。
GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::Java
TO mylogin;