카테고리:

컨텍스트 함수 (세션 오브젝트)

IS_DATABASE_ROLE_IN_SESSION

데이터베이스 역할이 현재 세션에 대한 사용자의 활성 기본 또는 보조 역할 계층 구조에 있는지, 또는 지정된 열에 현재 세션에 대한 사용자의 활성 기본 또는 보조 역할 계층 구조에 있는 데이터베이스 역할이 포함되어 있는지 확인합니다.

입력

데이터베이스 역할의 이름을 지정하는 문자열 리터럴 또는 열 이름을 지정하는 비리터럴.

반환
  • True:

    • 리터럴 인자(데이터베이스 역할 이름)의 경우 세션에서 현재 사용자의 활성 기본 역할 또는 보조 역할 이 지정 데이터베이스 역할의 권한을 상속합니다.

    • 비리터럴 인자(열 이름)의 경우 Snowflake는 테이블의 각 행을 평가하고 사용자의 현재 세션에서 데이터베이스 역할을 지정하는 값이 포함된 행을 반환합니다. 각 행은 사용 중인 데이터베이스 또는 쿼리에 지정된 데이터베이스에서 비롯된 데이터베이스 역할 이름에 해당합니다.

  • False:

    • 리터럴 인자의 경우 지정된 데이터베이스 역할이 현재 사용자의 기본 역할 또는 보조 역할의 역할 계층 구조에 없습니다.

    • 비리터럴 인자의 경우 데이터베이스 역할이 사용 중인 데이터베이스 또는 쿼리에 지정된 데이터베이스의 테이블 열에 없으면 행이 반환되지 않습니다.

구문

리터럴 — 데이터베이스 역할을 직접 지정:

IS_DATABASE_ROLE_IN_SESSION( '<string_literal>' )
Copy

비리터럴 — 열 지정:

IS_DATABASE_ROLE_IN_SESSION( <column_name> )
Copy

인자

'string_literal'

데이터베이스 역할의 이름입니다.

데이터베이스 역할의 정규화된 이름 또는 상대 이름을 지정합니다.

column_name

테이블 또는 뷰의 열 이름입니다.

사용법 노트

다음 참고 사항은 IS_DATABASE_ROLE_IN_SESSION 함수에만 적용됩니다.

  • 데이터베이스 역할이 포함된 데이터베이스가 사용 중이거나 데이터베이스 역할이 포함된 동일한 데이터베이스의 테이블을 쿼리할 때 데이터베이스 역할이 역할 계층 구조에서 활성 상태가 됩니다.

    데이터 공유 컨슈머로서 데이터베이스 역할을 사용하여 정책으로 보호되는 데이터를 쿼리하는 경우 정책으로 보호되는 데이터를 쿼리하기 전에 USE DATABASE database_name 명령으로 데이터베이스 역할이 포함된 데이터베이스를 로드하십시오. 이 명령은 사용자에 대한 현재 역할의 역할 계층 구조에서 데이터베이스 역할을 활성화합니다. 자세한 내용은 정책으로 보호되는 데이터 공유하기 섹션을 참조하십시오.

  • 사용자 속성 DEFAULT_SECONDARY_ROLES 값이 ALL 일 때, 사용자에게 부여된 어떤 계정 역할이 지정된 데이터베이스 역할의 권한을 상속하는 경우 함수는 True 를 반환합니다.

  • 공유 데이터 를 보호하는 마스킹 정책 또는 행 액세스 정책의 조건에서 이 함수를 사용할 경우 정책이 포함된 데이터베이스와 정책으로 보호되는 데이터가 모두 컨슈머 계정에 공유되는지 확인하십시오. 정책과 정책으로 보호되는 데이터는 동일한 데이터베이스에 있을 수도 있고 서로 다른 데이터베이스에 있을 수도 있습니다. 자세한 내용은 정책으로 보호되는 데이터 공유하기 섹션을 참조하십시오.

다음 참고 사항은 IS_DATABASE_ROLE_IN_SESSION 및 IS_ROLE_IN_SESSION 함수에 모두 적용됩니다.

  • 한 개의 구문을 사용합니다.

  • 리터럴 구문:

    • 하나의 데이터베이스 역할 이름만 인자로 전달할 수 있습니다.

    • 인자는 문자열이고 대문자여야 합니다.

    • 계정 역할의 이름은 지원되지 않습니다.

  • 비리터럴 구문:

    • 하나의 열만 인자로 전달할 수 있습니다.

    • 열에는 STRING 데이터 타입이 있어야 합니다.

    • 열을 다음 중 하나로 지정합니다.

      • column_name

      • table_name.column_name

      • schema_name.table_name.column_name

      • database_name.schema_name.table_name.column_name

  • 가상 열:

    테이블에 저장되는 계산된 값이 아닌 식에서 계산된 값의 결과를 포함하는 가상 열은 지원되지 않습니다.

    SELECT IS_ROLE_IN_SESSION(UPPER(authz_role)) FROM t1;
    
    Copy

    식에 열 이름의 별칭이 있을 때만 가상 열이 지원됩니다.

    CREATE VIEW v2 AS
    SELECT
      authz_role,
      UPPER(authz_role) AS upper_authz_role
    FROM t2;
    
    SELECT IS_ROLE_IN_SESSION(upper_authz_role) FROM v2;
    
    Copy
  • 정책:

    마스킹 정책 또는 행 액세스 정책 과 함께 이러한 함수를 사용하는 경우, Snowflake 계정이 Enterprise Edition 이상인지 확인하십시오.

    정책 조건에서 역할 계층 구조와 상속된 권한을 평가해야 할 때는 이 함수를 사용하는 것이 좋습니다.

  • 결과 캐시:

    마스킹 정책이나 행 액세스 정책에서 이 함수를 사용하고 정책이나 정책으로 보호되는 테이블 또는 열 중 어떤 것도 이전 쿼리에서 변경되지 않은 경우 RESULT_SCAN 함수를 사용하여 보호된 테이블에 대한 쿼리 결과를 반환할 수 있습니다. 결과 캐시는 리터럴이 아닌 구문을 사용할 때만 적용됩니다.

  • 이러한 함수는 확정적이지 않고 Snowflake가 구체화할 데이터를 결정할 수 없으므로 구체화된 뷰 정의에서 함수를 사용할 수 없습니다.

지정된 역할에 부여된 권한이 세션의 현재 역할에 상속되는지 확인합니다.

SELECT IS_DATABASE_ROLE_IN_SESSION('DB1.R1');
Copy
+---------------------------------------+
| IS_DATABASE_ROLE_IN_SESSION('DB1.R1') |
+---------------------------------------+
| True                                  |
+---------------------------------------+

ROLE_NAME 이라는 열에 대한 데이터베이스 역할 값을 반환합니다.

SELECT *
FROM myb.s1.t1
WHERE IS_DATABASE_ROLE_IN_SESSION(role_name);
Copy

보안 데이터 공유와 관련된 추가적인 예는 정책으로 보호되는 데이터 공유하기 섹션을 참조하십시오.