다음을 통해 공유


CREATE EXTERNAL LANGUAGE(Transact-SQL)

적용 대상: SQL Server 2019(15.x)

데이터베이스의 외부 언어 확장명은 지정된 파일 경로 또는 바이트 스트림에서 등록합니다. 이 명령문은 데이터베이스 관리자가 SQL Server에서 지원되는 OS 플랫폼에 새 외부 언어를 등록하는 일반 메커니즘의 역할을 합니다. 자세한 내용은 언어 확장을 참조 하세요.

참고 항목

RPython 은 예약된 이름이며 해당 특정 이름으로 외부 언어를 만들 수 없습니다. RPython 사용 방법에 대한 자세한 내용은 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

언어 확장의 내용을 지정합니다. 플랫폼당 특정 언어에 대해 하나의 filespec만 허용됩니다.

external_lang_specifier

확장 코드가 포함된 .zip 또는 tar.gz 파일의 전체 파일 경로입니다. 이 콘텐츠는 .zip 파일(Windows) 또는 tar.gz(Linux)의 경로일 수 있습니다.

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 시나리오에 필요합니다. 하이브리드 아키텍처에서 언어는 플랫폼당 한 번 등록해야 합니다. 플랫폼이 지정되지 않은 경우 현재 OS가 가정됩니다.

사용 권한

CREATE EXTERNAL LANGUAGE 권한이 필요합니다. 기본적으로 db_owner 역할의 멤버인 dbo를 가진 사용자에게는 외부 언어를 만들 수 있는 권한이 있습니다. 다른 모든 사용자의 경우 GRANT 문을 사용하여 CREATE EXTERNAL LANGUAGE를 권한으로 지정하여 명시적으로 권한을 부여해야 합니다.

라이브러리를 수정하려면 별도의 권한 ALTER ANY EXTERNAL LANGUAGE가 필요합니다.

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 모두에 대한 외부 언어 만들기

Windows용 하나와 Linux용 하나로 최대 두 개의 <file_spec>를 지정할 수 있습니다.

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. 외부 스크립트를 실행할 수 있는 권한 부여

다음 예제에서는 Java 외부 언어를 사용하여 스크립트를 실행할 수 있도록 mylogin에 보안 주체 액세스 권한을 부여합니다.

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

참고 항목

ALTER EXTERNAL LANGUAGE(Transact-SQL)
DROP EXTERNAL LANGUAGE(Transact-SQL)
sys.external_languages
sys.external_language_files