카테고리:

컨텍스트 함수 (일반)

SYS_CONTEXT(SNOWFLAKE$SESSION 네임스페이스)

함수가 호출된 세션에 대한 정보를 반환합니다.

다음 컨텍스트에서 이 함수를 호출할 수 있습니다.

  • 현재 세션에서 이 함수를 직접 호출할 수 있습니다.

  • 이 함수를 호출하는 호출자 권한 실행 파일(예: 호출자 권한 저장 프로시저)을 실행할 수 있습니다.

  • 소유자 역할에 계정에 대한 READ SESSION 권한이 부여된 경우 이 함수를 호출하는 소유자 권한 실행 파일(예: 소유자 권한 저장 프로시저)을 실행할 수 있습니다.

다른 모든 컨텍스트에서 함수는 NULL을 반환합니다.

참고 항목:

SYS_CONTEXT , SYS_CONTEXT(SNOWFLAKE$APPLICATION 네임스페이스) , SYS_CONTEXT(SNOWFLAKE$ENVIRONMENT 네임스페이스) , SYS_CONTEXT(SNOWFLAKE$ORGANIZATION 네임스페이스)

구문

속성 검색을 위한 구문:

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<property>'
)
Copy

함수 호출을 위한 구문:

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<function>' , '<argument>' [ , ... ]
)
Copy

인자

'SNOWFLAKE$SESSION'

속성을 검색하거나 함수를 호출하여 함수가 호출되는 세션에 대한 정보를 반환하도록 지정합니다.

'property'

검색할 속성의 이름입니다. 다음 속성을 지정할 수 있습니다.

속성

설명

PRINCIPAL_NAME

세션을 시작하는 주체의 이름(사용자, 작업 또는 SPCS 서비스)입니다. 이름은 PRINCIPAL_TYPE 속성의 값에 따라 다릅니다.

  • PRINCIPAL_TYPE``이 다음 하나인 경우 ``PRINCIPAL_NAME 속성 값은 사용자의 이름입니다.

    • USER

    • USER_PERSON

    • USER_SERVICE

    • USER_LEGACY_SERVICE

  • ``PRINCIPAL_TYPE``이 ``TASK``인 경우 값은 작업의 이름입니다.

  • ``PRINCIPAL_TYPE``이 ``SNOWSERVICE``인 경우 값은 SPCS 서비스의 이름입니다.

PRINCIPAL_TYPE

세션을 시작한 주체의 유형입니다. 이 속성은 다음 값 중 하나를 가질 수 있습니다.

  • 사용자가 세션을 시작한 경우 값은 USER 또는 :samp:`USER_{suffix}`입니다. :samp:`{suffix}`는 사용자 유형에 따라 다릅니다.

    • 사용자 오브젝트에 TYPE 속성이 없는 경우 값은 ``USER``입니다.

    • TYPE 속성이 ``PERSON``인 경우 값은 ``USER_PERSON``입니다.

    • TYPE 속성이 ``SERVICE``인 경우 값은 ``USER_SERVICE``입니다.

    • TYPE 속성이 ``LEGACY_SERVICE``인 경우 값은 ``USER_LEGACY_SERVICE``입니다.

  • :doc:`작업</user-guide/tasks-intro>`이 세션을 시작한 경우 값은 ``TASK``입니다.

  • :doc:`SPCS 서비스</developer-guide/snowpark-container-services/overview>`가 세션을 시작한 경우 값은 ``SNOWSERVICE``입니다.

PRINCIPAL_EMAIL

주체와 연결된 이메일 주소입니다. 연결된 이메일 주소가 없는 경우 이 속성의 값은 NULL입니다.

PRINCIPAL_DATABASE

주체에 대한 오브젝트가 포함된 데이터베이스의 이름입니다. 예를 들어, 주체가 작업인 경우 이 속성의 값은 작업이 포함된 데이터베이스의 이름입니다.

주체가 계정 수준 오브젝트(예: 사용자)인 경우 이 속성의 값은 NULL입니다.

PRINCIPAL_SCHEMA

주체에 대한 오브젝트를 포함하는 스키마의 이름입니다. 예를 들어, 주체가 작업인 경우 이 속성의 값은 작업이 포함된 스키마의 이름입니다.

주체가 계정 수준 오브젝트(예: 사용자)인 경우 이 속성의 값은 NULL입니다.

ID

함수가 호출된 세션의 식별자입니다.

ROLE

함수가 호출된 세션의 기본 역할입니다.

ROLE_TYPE

기본 역할의 유형입니다. 이 속성은 다음 값 중 하나를 가질 수 있습니다.

  • 기본 역할이 계정 역할인 경우 값은 ``ROLE``입니다.

ROLE_DATABASE

기본 역할이 데이터베이스 역할인 경우 데이터베이스 역할을 포함하는 데이터베이스 의 이름입니다.

SECONDARY_ROLES

세션에서 보조 역할로 활성화된 계정 수준 역할의 JSON 배열입니다. 활성화된 역할에는 계층상에서 요청된 역할 아래에 있는 역할이 포함됩니다. 예를 들어, 사용자가 다음을 실행했다고 가정해 보겠습니다.

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

이 속성의 JSON 배열에는 ACCOUNTADMIN 역할 및 ACCOUNTADMIN 역할 아래에 있는 SECURITYADMIN, SYSADMIN, USERADMIN 역할이 포함됩니다.

WANTED_SECONDARY_ROLES

사용자가 요청한 계정 수준 역할의 JSON 배열입니다. 예를 들어, 사용자가 다음을 실행했다고 가정해 보겠습니다.

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

이 속성의 JSON 배열에는 ACCOUNTADMIN 역할만 포함됩니다.

DATABASE

함수를 호출한 역할에 데이터베이스에 액세스할 수 있는 권한이 있는 경우 세션에 사용 중인 현재 데이터베이스입니다.

SCHEMA

함수를 호출한 역할에 스키마에 액세스할 수 있는 권한이 있는 경우 세션에 사용 중인 현재 스키마입니다.

SCHEMAS

함수를 호출한 역할에 데이터베이스에 액세스할 수 있는 권한이 있는 경우 세션에 대한 스키마의 현재 :ref:`검색 경로<label-object_name_resolution_search_path>`입니다.

WAREHOUSE

세션에 사용 중인 현재 웨어하우스입니다.

'function'

호출하려는 함수의 이름입니다. 다음 함수를 호출할 수 있습니다.

'argument' [ , ... ]

호출하려는 함수에 전달할 인자입니다.

반환

이 함수는 VARCHAR 값 또는 NULL을 반환합니다.

  • 반환 값은 검색 중인 속성 또는 :ref:`호출 중인 함수<label-sys_context_snowflake_session_function>`에 따라 다릅니다.

  • 지원되는 컨텍스트 외부에서 SNOWFLAKE$SESSION 네임스페이스를 사용하여 SYS_CONTEXT를 호출하는 경우 함수는 NULL을 반환합니다.

사용법 노트

  • 셸에서 큰따옴표로 묶인 문자열에 함수 호출을 지정하는 경우 $ 문자를 백슬래시(\)로 이스케이프하여 ``$SESSION``이 셸 변수로 해석되지 않습니다.

    예를 들어, |sf-cli|를 사용하고 SQL 문을 큰따옴표로 묶어 명령줄 인자로 지정하는 경우:

    snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
    
    Copy

다음 예제는 세션에 대한 컨텍스트 정보를 검색하는 방법을 보여줍니다.

주체에 대한 정보 검색하기

다음 예제에서는 함수를 호출한 주체의 이름과 유형을 반환합니다.

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_NAME') AS name,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_TYPE') AS type,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_EMAIL') AS email;
Copy
+--------------+-------------+---------------------+
| NAME         | TYPE        | EMAIL               |
|--------------+-------------+---------------------|
| MY_USER_NAME | USER_PERSON | my.user@example.com |
+--------------+-------------+---------------------+

역할에 대한 정보 검색하기

다음 예제에서는 함수가 호출된 세션에서의 기본 역할의 이름과 유형을 반환합니다.

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE') AS role,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE_TYPE') AS type;
Copy
+---------+------+
| ROLE    | TYPE |
|---------+------|
| MY_ROLE | ROLE |
+---------+------+

다음 예제에서는 ACCOUNTADMIN 역할을 보조 역할로 사용합니다. 그런 다음 이 예제에서는 세션(ACCOUNTADMIN)에서 요청된 보조 역할 목록 및 세션에서 보조 역할로 활성화된 계정 수준 역할 목록을 반환합니다.

활성화된 역할 목록에는 계층상에서 요청된 역할 아래에 있는 역할이 포함됩니다. ACCOUTADMIN 역할이 활성화되어 있으므로 ACCOUNTADMIN 역할에 속하는 SECURITYADMIN, SYSADMIN, USERADMIN가 목록에 포함됩니다.

USE SECONDARY ROLES ACCOUNTADMIN;

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'WANTED_SECONDARY_ROLES') AS requested_roles,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SECONDARY_ROLES') AS requested_roles_with_child_roles;
Copy
+------------------+---------------------------------------------------------+
| REQUESTED_ROLES  | REQUESTED_ROLES_WITH_CHILD_ROLES                        |
|------------------+---------------------------------------------------------|
| ["ACCOUNTADMIN"] | ["ACCOUNTADMIN","SECURITYADMIN","SYSADMIN","USERADMIN"] |
+------------------+---------------------------------------------------------+

현재 데이터베이스, 스키마, 검색 경로, 웨어하우스 검색하기

다음 예제에서는 세션에 사용 중인 현재 데이터베이스, 스키마, 웨어하우스를 반환합니다.

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'DATABASE') AS database,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMA') AS schema,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'WAREHOUSE') AS warehouse;
Copy
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE    |
|----------+--------+--------------|
| MY_DB    | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+

다음 예제에서는 세션의 검색 경로가 포함된 JSON 배열을 반환합니다.

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
Copy
+---------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS') |
|---------------------------------------------|
| ["MY_DB.MY_SCHEMA","MY_DB.PUBLIC"]          |
+---------------------------------------------+

다음 예제에서는 검색 경로의 각 요소에 대한 행을 반환합니다.

SELECT value::VARCHAR AS path_element
  FROM TABLE(
    FLATTEN(INPUT => PARSE_JSON(SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS'))));
Copy
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+