SYS_CONTEXT

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

SYS_CONTEXT('SNOWFLAKE$SESSION', ...) 함수는 함수가 호출된 세션에 대한 정보를 반환해요.

출처: SYS_CONTEXT (SNOWFLAKE$SESSION 네임스페이스)

본문

SYS_CONTEXT 함수는 함수가 호출된 세션에 대한 정보를 반환해요. 이 함수는 다음 컨텍스트에서 호출할 수 있어요:

  • 현재 세션에서 이 함수를 직접 호출할 수 있어요.
  • 이 함수를 호출하는 호출자 권리(caller's rights) 실행 파일(예: 호출자 권리 저장 프로시저)을 실행할 수 있어요.
  • 계정에 대한 READ SESSION 권한이 소유자 역할에 부여된 경우, 이 함수를 호출하는 소유자 권리(owner's rights) 실행 파일(예: 소유자 권리 저장 프로시저)을 실행할 수 있어요.

그 외의 컨텍스트에서는 함수가 NULL을 반환해요.

함께 보기: SYS_CONTEXT, SYS_CONTEXT (SNOWFLAKE$APPLICATION 네임스페이스), SYS_CONTEXT (SNOWFLAKE$CURRENT 네임스페이스), SYS_CONTEXT (SNOWFLAKE$ENVIRONMENT 네임스페이스), SYS_CONTEXT (SNOWFLAKE$ORGANIZATION 네임스페이스), 에이전트를 위한 제한된 세션 범위 (Restricted Session Scope for agents)

구문 (Syntax)

속성 검색 구문:

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

함수 호출 구문:

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

인자 (Arguments)

  • 'SNOWFLAKE$SESSION' — 함수가 호출된 세션에 대한 정보를 반환하는 속성을 검색하거나 함수를 호출하려는 것을 지정해요.
  • 'property' — 검색할 속성의 이름이에요. 다음 속성을 지정할 수 있어요:
속성 (Property) 설명 (Description)
ACTIVE_RESTRICTED_SESSION_SCOPES 세션에 현재 활성화된 Restricted Session Scope를 반환해요. 이를 통해 적용한 세션 정책을 검사하지 않고도 적용 중인 권한 상한(privilege ceiling)을 확인할 수 있어요. 자세한 내용은 에이전트를 위한 Restricted Session Scope를 참조해요.
PRINCIPAL_NAME 세션을 시작한 주체(principal, 사용자·태스크·SPCS 서비스)의 이름. 이름은 PRINCIPAL_TYPE 속성의 값에 따라 달라져요: PRINCIPAL_TYPE이 USER, USER_PERSON, USER_SERVICE, USER_LEGACY_SERVICE 중 하나이면 PRINCIPAL_NAME은 사용자의 이름. PRINCIPAL_TYPE이 TASK이면 값은 태스크의 이름. PRINCIPAL_TYPE이 SNOWSERVICE이면 값은 SPCS 서비스의 이름.
PRINCIPAL_TYPE 세션을 시작한 주체의 유형. 사용자가 세션을 시작한 경우 USER 또는 USER_suffix 값을 가짐. 사용자 객체에 TYPE 속성이 없으면 USER, TYPE이 PERSON이면 USER_PERSON, TYPE이 SERVICE이면 USER_SERVICE, TYPE이 LEGACY_SERVICE이면 USER_LEGACY_SERVICE. 태스크가 세션을 시작한 경우 TASK. SPCS 서비스가 세션을 시작한 경우 SNOWSERVICE.
PRINCIPAL_EMAIL 주체와 연결된 이메일 주소. 연결된 이메일 주소가 없으면 이 속성의 값은 NULL.
PRINCIPAL_DATABASE 주체의 객체를 포함하는 데이터베이스의 이름. 예를 들어 주체가 태스크이면 이 값은 태스크를 포함하는 데이터베이스의 이름. 주체가 사용자와 같은 계정 수준 객체이면 이 값은 NULL.
PRINCIPAL_SCHEMA 주체의 객체를 포함하는 스키마의 이름. 예를 들어 주체가 태스크이면 이 값은 태스크를 포함하는 스키마의 이름.
  • 'function' — 호출하려는 함수의 이름이에요. 다음 함수를 호출할 수 있어요: IS_DATABASE_ROLE_ACTIVATED (SYS_CONTEXT 함수), IS_ROLE_ACTIVATED (SYS_CONTEXT 함수).
  • 'argument' [ , ... ] — 호출하려는 함수에 전달할 인자예요. IS_ROLE_ACTIVATED는 하나 이상의 역할 이름을 받아 역할 중 하나가 활성화되어 있으면 'TRUE'를 반환해요. 각 역할이 상수(문자열 리터럴 등)인 경우에만 여러 역할을 지정할 수 있어요. 역할이 상수가 아닌 표현식이면 단일 역할만 지정할 수 있어요.

반환 (Returns)

이 함수는 VARCHAR 값 또는 NULL을 반환해요:

  • 반환 값은 검색하는 속성 또는 호출하는 함수에 따라 달라져요.
  • 지원되는 컨텍스트 밖에서 SNOWFLAKE$SESSION 네임스페이스로 SYS_CONTEXT를 호출하면 함수는 NULL을 반환해요.

2026_06 동작 변경 번들

계정에서 2026_06 동작 변경 번들이 활성화되면 SYS_CONTEXT('SNOWFLAKE$SESSION', 'ID')는 NUMBER를, SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_ROLE_ACTIVATED', '<role>')는 BOOLEAN을 반환해요. 이 네임스페이스의 다른 속성과 함수는 계속 VARCHAR를 반환해요.

::BOOLEAN 또는 ::NUMBER와 같은 기존 캐스트는 변경 없이 계속 동작해요.

네임스페이스별 모든 속성과 함수의 반환 타입은 SYS_CONTEXT return types를 참조해요.

사용 메모 (Usage notes)

  • 정책을 테스트할 때 이 네임스페이스의 속성과 함수의 값을 시뮬레이션하려면 해당 POLICY_CONTEXT 인자를 사용해요. 예를 들어 ROLE 속성을 시뮬레이션하려면 SNOWFLAKE$SESSION_ROLE을, IS_ROLE_ACTIVATED의 결과를 시뮬레이션하려면 SNOWFLAKE$SESSION_ACTIVATED_ROLES를 사용해요.
  • 셸의 큰따옴표 문자열에 함수 호출을 지정할 때 $SESSION이 셸 변수로 해석되지 않도록 $ 문자를 백슬래시(\)로 이스케이프해요. 예를 들어 Snowflake CLI를 사용하고 셸 명령줄 인자로 SQL 문을 큰따옴표로 지정하는 경우:
    snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
    

예제 (Examples)

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

주체 정보 검색

함수를 호출한 주체의 이름과 유형을 반환해요:

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;
+--------------+-------------+---------------------+
| NAME         | TYPE        | EMAIL               |
|--------------+-------------+---------------------|
| MY_USER_NAME | USER_PERSON | [email protected] |
+--------------+-------------+---------------------+

역할 정보 검색

함수가 호출된 세션의 기본 역할 이름과 유형을 반환해요:

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

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

활성화된 역할 목록에는 요청된 역할 아래 계층적으로 속한 역할이 포함돼요. ACCOUNTADMIN 역할이 활성화되어 있으므로 목록에는 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;
+------------------+---------------------------------------------------------+
| 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;
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE    |
|----------+--------+--------------|
| MY_DB    | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+

세션의 검색 경로를 포함하는 JSON 배열을 반환해요:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
+---------------------------------------------+
| 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'))));
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+

더 알아보기 (Learn more)

  • SYS_CONTEXT
  • SYS_CONTEXT (SNOWFLAKE$APPLICATION 네임스페이스)
  • SYS_CONTEXT (SNOWFLAKE$CURRENT 네임스페이스)
  • SYS_CONTEXT (SNOWFLAKE$ENVIRONMENT 네임스페이스)
  • SYS_CONTEXT (SNOWFLAKE$ORGANIZATION 네임스페이스)
  • 컨텍스트 함수 (Context functions)