- 카테고리:
컨텍스트 함수 (세션 오브젝트)
IS_ROLE_IN_SESSION¶
인수 값(즉, 역할)이 세션에 대한 사용자의 활성 기본 또는 보조 역할 계층 구조에 있는지, 또는 지정된 열에 세션에 대한 사용자의 활성 기본 또는 보조 역할 계층 구조에 있는 역할이 포함되어 있는지 확인합니다.
- 입력
역할을 직접 지정하는 문자열 리터럴 또는 열 이름을 지정하는 비리터럴.
- 반환
TRUE
:문자열 리터럴 인자의 경우 세션에서 현재 사용자의 활성 기본 역할 또는 보조 역할 이 지정 역할의 권한을 상속합니다.
DEFAULT_SECONDARY_ROLES
값이ALL
일 때, 사용자에게 부여된 모든 역할이 지정 역할의 권한을 상속합니다.지정된 역할은 현재 기본 역할 또는 보조 역할(즉, 각각 CURRENT_ROLE 또는 CURRENT_SECONDARY_ROLES 에 의해 반환된 역할)이거나 역할 계층 구조의 모든 하위 역할일 수 있습니다.
비리터럴 인자의 경우 Snowflake는 각 행을 평가하고 사용자의 현재 세션에서 활성 기본 또는 보조 역할을 지정하는 값이 포함된 행을 반환합니다. 각 행은 활성 기본 또는 보조 역할이 볼 수 있는 역할 이름에 해당합니다.
FALSE
:문자열 리터럴 인자의 경우 지정 역할이 현재 기본 또는 보조 역할의 역할 계층 구조에서 더 높거나 역할 계층 구조에 전혀 없습니다.
비리터럴 인자의 경우 Snowflake는 각 행을 평가합니다. 행이 현재 기본 또는 보조 역할의 역할 계층 구조에서 더 높은 역할 이름을 포함하거나 역할 계층 구조에 전혀 없는 경우 Snowflake는 이 행을 반환하지 않습니다. 이 경우 Snowflake는 활성 기본 또는 보조 역할이 볼 수 있는 역할 이름(있는 경우)이 포함된 행만 반환합니다.
NULL
:데이터 공유 컨슈머 계정에서, 이 함수는 마스킹 정책 조건에서와 같이 공유 오브젝트(예: 보안 UDF 또는 보안 뷰)를 참조하는 경우 NULL을 반환합니다. 이 동작은 데이터 공유 컨슈머 계정에서 역할 계층 구조가 노출되는 것을 방지합니다.
- 참고 항목:
구문¶
리터럴: 역할 직접 지정:
IS_ROLE_IN_SESSION( '<string_literal>' )
비리터럴: 열 지정:
IS_ROLE_IN_SESSION( <column_name> )
인자¶
'string_literal'
역할의 이름입니다.
column_name
테이블 또는 뷰의 열 이름입니다.
사용법 노트¶
한 개의 구문을 사용합니다.
마스킹 정책 또는 행 액세스 정책 과 함께 이 함수를 사용하는 경우, Snowflake 계정이 Enterprise Edition 이상인지 확인하십시오.
정책 조건에서 역할 계층 구조와 상속된 권한을 평가해야 할 때는 이 함수를 사용하는 것이 좋습니다.
이 함수는 확정적이지 않고 Snowflake가 구체화할 데이터를 결정할 수 없으므로 구체화된 뷰 정의에서 함수를 사용할 수 없습니다.
리터럴 구문:
하나의 역할 이름만 인자로 전달할 수 있습니다.
인자는 문자열이고 대문자여야 합니다.
데이터베이스 역할의 이름은 지원되지 않습니다.
비리터럴 구문:
하나의 열만 인자로 전달할 수 있습니다.
열에는 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;
식에 열 이름의 별칭이 있을 때만 가상 열이 지원됩니다.
create view v2 as select authz_role, upper(authz_role) as upper_authz_role from t2; select is_role_in_session(upper_auth_role);
예¶
지정된 역할에 부여된 권한이 세션의 현재 역할에 상속되는지 확인합니다.
select is_role_in_session('ANALYST'); +-------------------------------+ | IS_ROLE_IN_SESSION('ANALYST') | |-------------------------------| | True | +-------------------------------+
role_name
이라는 열의 활성 기본 또는 보조 역할 값을 반환합니다.
select * from myb.s1.t1 where is_role_in_session(t1.role_name);
마스킹 정책 조건에서 직접 역할을 지정합니다.
create or replace masking policy allow_analyst as (val string) returns string -> case when is_role_in_session('ANALYST') then val else '*******' end;
행 액세스 정책에서 AUTHZ_ROLE
(즉, 권한이 부여된 역할)이라는 열을 지정한 다음, 테이블 열에 대한 정책을 설정합니다.
정책을 만듭니다.
create or replace row access policy rap_authz_role as (authz_role string) returns boolean -> is_role_in_session(authz_role);테이블에 정책을 추가합니다.
alter table allowed_roles add row access policy rap_authz_role on (authz_role);
매핑 테이블을 사용하여 ROLE_NAME
이라는 매핑 테이블 열에서 권한이 부여된 역할을 조회하는 행 액세스 정책에서 AUTHZ_ROLE
이라는 열을 지정합니다. 정책을 만든 후 AUTHZ_ROLE
열이 포함된 테이블에 정책을 추가합니다.
정책을 만듭니다.
create or replace row access policy rap_authz_role_map as (authz_role string) returns boolean -> exists ( select 1 from mapping_table m where authz_role = m.key and is_role_in_session(m.role_name) );테이블에 정책을 추가합니다.
alter table allowed_roles add row access policy rap_authz_role_map on (authz_role);