BUAT BAHASA EKSTERNAL (T-SQL)

Berlaku untuk: SQL Server 2019 (15.x)

Mendaftarkan ekstensi bahasa eksternal dalam database dari jalur file atau aliran byte yang ditentukan. Pernyataan ini berfungsi sebagai mekanisme umum bagi administrator database untuk mendaftarkan ekstensi bahasa eksternal baru pada platform OS apa pun yang didukung oleh SQL Server. Untuk informasi selengkapnya, lihat Ekstensi Bahasa.

Catatan

R dan Python adalah nama yang dicadangkan dan tidak ada bahasa eksternal yang dapat dibuat dengan nama tertentu tersebut. Untuk informasi selengkapnya tentang cara menggunakan R dan Python, lihat SQL Server Pembelajaran Mesin Services.

Sintaks

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'

Argumen

language_name

Bahasa adalah objek cakupan database. Nama bahasa harus unik dalam database.

owner_name

Menentukan nama pengguna atau peran yang memiliki bahasa eksternal. Jika tidak ditentukan, kepemilikan diberikan kepada pengguna saat ini. Bergantung pada izin, pengguna lain mungkin perlu diberikan izin eksplisit untuk menjalankan skrip menggunakan bahasa tertentu.

file_spec

Menentukan konten ekstensi bahasa. Hanya satu filespec yang diizinkan untuk bahasa tertentu, per platform.

external_lang_specifier

Jalur file lengkap ke file .zip atau tar.gz yang berisi kode ekstensi. Konten ini dapat berupa jalur ke file .zip (di Windows) atau tar.gz (di Linux).

content_bits

Menentukan konten bahasa sebagai hex literal, mirip dengan rakitan.

Opsi ini berguna jika Anda perlu membuat bahasa atau mengubah bahasa yang ada (dan memiliki izin yang diperlukan untuk melakukannya), tetapi sistem file di server dibatasi dan Anda tidak dapat menyalin file pustaka ke lokasi yang dapat diakses server.

external_lang_file_name

Nama ekstensi .dll atau file .so. Ini diperlukan untuk mengidentifikasi file yang benar, dalam kasus di mana ada beberapa file .dll atau .so di <external_lang_specifier> .zip atau tar.gz.

external_lang_parameters

Ini memberikan kemungkinan untuk memberikan serangkaian parameter ke runtime bahasa eksternal. Nilai parameter disediakan untuk runtime eksternal setelah proses eksternal dimulai. Namun, variabel lingkungan dapat diakses oleh ekstensi bahasa sebelum startup proses eksternal.

external_lang_env_variables

Ini memberikan kemungkinan untuk memberikan serangkaian variabel lingkungan ke runtime bahasa eksternal sebelum startup proses eksternal. Contoh variabel lingkungan adalah misalnya direktori beranda runtime itu sendiri. Misalnya: JRE_HOME.

platform

Parameter ini diperlukan untuk skenario OS hibrid. Dalam arsitektur hibrid, bahasa perlu didaftarkan sekali per platform. Jika tidak ada platform yang ditentukan, OS saat ini diasumsikan.

Izin

Memerlukan CREATE EXTERNAL LANGUAGE izin. Secara default, setiap pengguna yang memiliki dbo yang merupakan anggota peran db_owner memiliki izin untuk membuat bahasa eksternal. Untuk semua pengguna lain, Anda harus secara eksplisit memberi mereka izin menggunakan pernyataan GRANT , menentukan CREATE EXTERNAL LANGUAGE sebagai hak istimewa.

Untuk mengubah pustaka memerlukan izin terpisah, ALTER ANY EXTERNAL LANGUAGE.

Izin JALANKAN SKRIP EKSTERNAL

Anda dapat menggunakan izin EXECUTE EXTERNAL SCRIPT, sehingga eksekusi skrip eksternal dapat diberikan pada bahasa tertentu. Ini berbeda dari izin database EXECUTE ANY EXTERNAL SCRIPT, yang tidak mengizinkan pemberian izin eksekusi pada bahasa tertentu.

Ini berarti bahwa pengguna non-dbo perlu diberikan izin untuk menjalankan bahasa tertentu:

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

Izin referensi ke pustaka eksternal

Mirip dengan rakitan, izin referensi diperlukan untuk bahasa eksternal sehingga ada tautan antara pustaka eksternal dan bahasa eksternal. Misalnya, jika bahasa eksternal akan dihilangkan, pertama-tama pengguna perlu memastikan semua pustaka eksternal yang mereferensikan bahasa tersebut dihilangkan. Anda dapat melihat bahasa eksternal sebagai objek tingkat yang lebih tinggi daripada pustaka eksternal, dalam hierarki.

Contoh

J. Membuat bahasa eksternal dalam database

Contoh berikut menambahkan bahasa eksternal yang disebut Java ke database di SQL Server di Windows.

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

B. Membuat bahasa eksternal untuk Windows dan Linux

Anda dapat menentukan hingga dua <file_spec>, satu untuk Windows dan satu untuk 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. Memberikan izin untuk menjalankan skrip eksternal

Contoh berikut memberikan akses utama mylogin untuk menjalankan skrip menggunakan bahasa eksternal Java .

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

Baca juga

UBAH BAHASA EKSTERNAL (Transact-SQL)
DROP EXTERNAL LANGUAGE (Transact-SQL)
sys.external_languages
sys.external_language_files