Snowflake 세션 및 세션 정책

이 항목에서는 Snowflake 세션 및 세션 정책을 설명하고 계정 또는 사용자 수준에서 세션 정책을 구성하는 지침을 제공합니다.

이 항목의 내용:

Snowflake 세션

세션은 사용자가 Snowflake에 연결하고 Snowflake 프로그래밍 방식 클라이언트, Snowsight 또는 classic web interface 를 사용하여 성공적으로 인증할 때 시작됩니다. 세션은 ID 공급자(즉, IdP) 세션과는 무관합니다. Snowflake 세션이 만료되었지만 IdP 세션은 활성 상태로 남아 있는 경우, 사용자는 로그인 자격 증명을 다시 입력하지 않고도 Snowflake에 로그인할 수 있습니다(즉, 자동 인증).

세션은 사용자 활동이 계속되면 무기한 유지됩니다. 세션에서 유휴 세션 시간 제한 이라는 비활동 기간 후에는 사용자가 Snowflake에 다시 인증해야 합니다. 유휴 세션 시간 제한의 최대값은 4시간이며, 세션 정책이 유휴 세션 시간 제한 기간을 수정할 수 있습니다. 유휴 세션 시간 제한은 다음에 적용됩니다.

Snowflake에서는 가능하면 기존 세션을 재사용하고 더 이상 세션이 필요하지 않을 때 Snowflake에 대한 연결을 종료할 것을 권장합니다.

Snowflake 클래식 웹 인터페이스 세션

Worksheets Worksheet tab 탭에서, Snowflake는 새 워크시트가 생성될 때마다 새 세션을 만듭니다. 각 워크시트는 최대 4시간의 유휴 동작으로 제한되며, 각 워크시트의 유휴 시간 초과는 따로 추적됩니다.

워크시트가 닫힐 때 워크시트에 대한 사용자 세션이 종료됩니다.

열린 워크시트에 대해 4시간의 제한이 만료된 후, Snowflake는 웹 인터페이스에서 사용자를 로그아웃합니다.

참고

쿼리 결과 세트 스크롤 또는 데이터 세트 정렬과 같은 수동 동작으로는 유휴 세션 시간 초과 추적기가 재설정되지 않습니다.

세션이 너무 일찍 닫히고 클래식 웹 인터페이스에서 로그아웃되는 일을 방지하려면 필요한 SQL 문을 전부 로컬 파일에 저장하고 사용하지 않는 상태로 열려 있는 워크시트를 전부 닫으십시오.

세션 정책

세션 정책은 유휴 세션 시간 제한 기간을 분 단위로 정의하고 기본 유휴 시간 제한 값인 4시간을 재정의하는 옵션을 제공합니다.

규정 준수 요구 사항을 충족시키기 위해 구성 가능한 유휴 시간 제한 기간으로 계정 또는 사용자에 대한 세션 정책을 설정할 수 있습니다. 계정 및 사용자 수준 세션 정책 모두와 연결된 사용자의 경우 사용자 수준 세션 정책이 우선 적용됩니다.

세션 정책 동작을 관리하는 ​​다음 두 가지 속성이 있습니다.

  • 프로그램 방식 및 Snowflake 클라이언트에 대한 SESSION_IDLE_TIMEOUT_MINS.

  • 클래식 웹 인터페이스에 대한 SESSION_UI_IDLE_TIMEOUT_MINS.

Snowflake에 대한 인증에 성공할 때 시간 초과 기간이 시작됩니다. 세션 정책이 설정되지 않은 경우, Snowflake는 기본값인 240 분(즉, 4시간)을 사용합니다. 세션 정책에 대해 구성 가능한 최소 유휴 시간 제한 값은 5 분입니다. 세션이 만료될 때 사용자는 Snowflake에 다시 인증해야 합니다.

참고

세션 정책에 관한 다음 사항에 유의하십시오.

자세한 내용은 다음을 참조하십시오.

고려 사항

  • 클라이언트가 CLIENT_SESSION_KEEP_ALIVE 옵션을 지원하고 옵션이 TRUE 로 설정된 경우 Snowflake에 대한 연결이 활성 상태인 한 클라이언트는 Snowflake 세션을 무기한으로 보존합니다. 그렇지 않고 이 옵션이 FALSE 로 설정되어 있으면 세션은 4시간 후에 종료됩니다. 이 옵션을 사용하면 세션이 많이 열려 리소스 수요가 증가하여 성능 저하로 이어질 수 있으므로, 가능하면 이 옵션을 사용하지 마십시오.

  • CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY 매개 변수를 사용해 클라이언트가 세션에 대한 토큰 업데이트를 시도하는 간격(초)을 지정할 수 있습니다. Snowflake 오브젝트가 계속 사용됨에 따라(예: DDL 및 DML 문의 실행), 웹 인터페이스 세션의 새로 고침이 이루어질 수 있습니다. Snowflake는 30초마다 이 동작을 확인합니다.

  • 새 워크시트를 만들거나 기존 워크시트를 열면 설정된 사용자 세션이 계속 사용되지만, 유휴 세션 시간 제한이 0으로 재설정됩니다.

제한 사항

향후 권한 부여

세션 정책에 대한 향후 권한 부여 는 지원되지 않습니다.

해결 방법으로 APPLY SESSION POLICY 권한을 사용자 지정 역할에 부여하여 해당 역할이 사용자 또는 Snowflake 계정에 세션 정책을 적용하도록 허용하십시오.

Snowsight

Snowsight 는 현재 세션 정책을 지원하지 않습니다. 세션 정책이 일반 공급될 때(GA) 이 지원이 제공될 것입니다.

세션 정책 구현하기

다음 단계는 세션 정책 구현에 대한 대표적인 가이드입니다.

이러한 단계에서는 policy_admin 으로 명명된 사용자 지정 역할이 세션 정책을 소유하고(즉, 세션 정책에 대한 OWNERSHIP 권한이 있고) 계정 또는 사용자에 대한 세션 정책 설정을 담당하는(즉, ACCOUNT에 대한 APPLY SESSION POLICY 권한 또는 APPLY SESSION POLICY ON USER 권한이 있는) 중앙 집중식 관리 접근 방식을 가정합니다.

참고

계정에 대한 정책을 설정하려면 policy_admin 사용자 지정 역할에 다음 권한이 있어야 합니다.

  • 세션 정책이 포함된 데이터베이스와 스키마에 대한 USAGE 권한

  • 세션 정책이 포함된 스키마에 대한 CREATE SESSION POLICY 권한

세션 정책을 구현하려면 다음 단계를 따르십시오.

1단계: POLICY_ADMIN 사용자 지정 역할 만들기

사용자가 세션 정책을 만들고 관리할 수 있는 사용자 지정 역할을 만듭니다. 이 항목 전체에서 예시로 드는 사용자 지정 역할에 알맞은 이름을 지정할 수도 있겠지만, 여기서는 policy_admin 이라고 합니다.

사용자 지정 역할이 이미 있는 경우 다음 단계로 계속 진행하십시오.

그렇지 않으면, POLICY_ADMIN 사용자 지정 역할을 만드십시오.

use role useradmin;

create role policy_admin;

2단계: POLICY_ADMIN 사용자 지정 역할에 권한 부여

POLICY_ADMIN 사용자 지정 역할에 아직 다음 권한이 없는 경우, 아래에 나타낸 것처럼 권한을 부여합니다.

  • 세션 정책이 포함될 데이터베이스와 스키마에 대한 USAGE 권한.

  • 세션 정책이 포함될 스키마에 대한 CREATE SESSION POLICY 권한.

  • 계정에 대한 APPLY SESSION POLICY 권한

  • 사용자 수준에서 세션 정책을 설정할 계획인 경우 각 사용자에 대한 APPLY SESSION POLICY 권한.

use role securityadmin;

grant usage on database <db_name> to role policy_admin;

grant usage, create session policy on schema <db_name.schema_name> to role policy_admin;

grant apply session policy on account to role policy_admin;

세션 정책을 개별 사용자와 연결하는 경우:

grant apply session policy on user jsmith to role policy_admin;

자세한 내용은 DDL 명령, 작업 및 권한 요약 섹션을 참조하십시오.

3단계: 새 세션 정책 만들기

POLICY_ADMIN 사용자 지정 역할을 사용하여 프로그래밍 방식 클라이언트, Snowflake 클라이언트, 웹 인터페이스에 대한 유휴 시간 제한 값이 각각 60 분인 새 세션 정책을 만듭니다. 자세한 내용은 CREATE SESSION POLICY 섹션을 참조하십시오.

use role policy_admin;

CREATE SESSION POLICY <db_name.schema_name>.session_policy_prod_1
  SESSION_IDLE_TIMEOUT_MINS = 60
  SESSION_UI_IDLE_TIMEOUT_MINS = 60
  COMMENT = 'Session policy for the prod_1 environment'
;

여기서:

<db_이름.스키마_이름>.session_policy_prod_1

세션 정책의 정규화된 이름.

session_idle_timeout_mins = 60

Snowflake 클라이언트 및 프로그래밍 방식 클라이언트의 유휴 시간 제한 기간(분).

session_ui_idle_timeout_mins = 30

Snowflake 웹 인터페이스의 유휴 시간 제한 기간(분).

comment = 'Session policy for the prod_1 environment'

세션 정책의 목적을 지정하는 주석.

4단계: 계정 또는 사용자에 대한 세션 정책 설정

POLICY_ADMIN 사용자 지정 역할을 사용하여 ALTER ACCOUNT 명령으로 계정에 대한 정책을 설정하거나 ALTER USER 명령으로 사용자(예: 사용자 이름 jsmith)에 대한 정책을 설정합니다.

use role policy_admin;

alter account set session policy <db_name.schema_name>.session_policy_prod_1;

alter user jsmith set session policy my_database.my_schema.session_policy_prod_1_jsmith;

중요

계정 또는 사용자에 대해 이미 설정된 세션 정책을 바꾸려면 먼저 세션 정책을 설정 해제한 다음, 계정 또는 사용자에 대한 새 세션 정책을 설정하십시오. 예:

alter account unset session policy;

alter account set session policy <db_name.schema_name>.session_policy_prod_2;

5단계: 세션 정책 적용

계정 관리자(즉, ACCOUNTADMIN 시스템 역할을 가진 사용자)로서, ENFORCE_SESSION_POLICY 매개 변수를 설정합니다.

alter account set enforce_session_policy = true;

중요

ENFORCE_SESSION_POLICY 매개 변수가 TRUE 로 설정된 경우:

  • 클래식 웹 인터페이스에서 여러 워크시트가 열려 있을 때, 다음 글머리 기호 항목으로 표시된 것처럼 워크시트의 모든 사용자 활동은 관찰된 idle_session_timeout_value 를 업데이트합니다.

  • 클래식 웹 인터페이스는 마우스 클릭, 결과 스크롤, 키보드 클릭과 같은 사용자 활동을 추적하고 내부 Snowflake 모니터로 하트비트를 보냅니다. 이 하트비트 기록은 3분마다 전송되며 이를 구성할 수 없습니다.

    이 매개 변수를 설정하면 관찰된 유휴 세션 시간 제한 값이 다음과 같이 업데이트됩니다.

    idle_session_timeout_value = (default_idle_timeout - session_policy_timeout) + 3 minutes
    

    예를 들어 다음과 같은 경우에

    • default_idle_timeout 값이 4시간(240분)인 경우.

    • session_policy_timeout 값이 1시간(60분)인 경우.

    • 하트비트 기록이 3분인 경우.

    관찰되는 idle_session_timeout_value 는 다음과 같습니다.

    idle_session_timeout_value = (240-60) + 3
    
    idle_session_timeout_value = 183 minutes
    

세션 정책 관리하기

세션 정책 권한 참조

사용자가 세션 정책을 생성, 설정 및 소유할 수 있는지 여부를 결정하기 위해 Snowflake에서 지원하는 세션 정책 권한은 다음과 같습니다.

스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

권한

사용법

CREATE SESSION POLICY

세션 정책을 만드는 스키마에 대해 설정합니다. 스키마에서 새 세션 정책을 생성할 수 있습니다.

APPLY SESSION POLICY

계정 또는 개별 사용자에 대해 설정합니다. 계정 또는 사용자 수준에서 세션 정책을 적용할 수 있습니다.

OWNERSHIP

세션 정책에 대해 설정합니다. 세션 정책에 대한 모든 권한을 부여합니다. 세션 정책의 속성 대부분을 변경하는 데 필요합니다.

DDL 명령, 작업 및 권한 요약

다음 테이블은 세션 정책 DDL 작업과 필요한 권한 사이의 관계를 요약하여 제공합니다.

작업

필요한 권한

세션 정책 만들기

스키마에 대한 CREATE SESSION POLICY 권한을 보유한 역할.

세션 정책 변경

세션 정책에 대한 OWNERSHIP 권한을 보유한 역할.

세션 정책 삭제

세션 정책에 대한 OWNERSHIP 권한을 보유한 역할.

세션 정책 설명

세션 정책에 대한 OWNERSHIP 권한 또는 . APPLY SESSION POLICY 권한을 보유한 역할.

세션 정책 표시

세션 정책에 대한 OWNERSHIP 권한 또는 . APPLY SESSION POLICY 권한을 보유한 역할.

세션 정책 설정 및 설정 해제

계정의 경우 계정에 대한 APPLY SESSION POLICY 권한을 보유한 역할. . 사용자의 경우 USER <사용자 이름> 권한에 대한 APPLY SESSION POLICY를 보유한 역할.

세션 정책 DDL 참조

Snowflake는 세션 정책 오브젝트를 관리하기 위해 다음 DDL 명령을 제공합니다.

계정에 대한 세션 정책을 설정하거나 설정 해제하려면 아래에 표시된 것처럼 ALTER ACCOUNT 명령을 실행하십시오.

alter account set session policy <policy_name>;
alter account unset session policy;

사용자 수준 세션 정책을 설정하거나 설정 해제하려면 아래에 표시된 것처럼 ALTER USER 명령을 실행하십시오.

alter user <username> set session policy <policy_name>;
alter user <username> unset session policy;

세션 정책 문제 해결하기

  • 세션 정책이 계정 또는 사용자에게 할당되고 세션 정책이 포함된 데이터베이스 또는 스키마를 삭제한 후 새 세션 정책이 계정 또는 사용자에게 할당되는 경우, 사용자는 새 세션 정책에서 유휴 세션 시간 초과 값이 유지되지 않습니다.

    해결 방법은 이 항목 에서와 같이 ALTER ACCOUNT 명령을 사용하여 계정에서 또는 ALTER USER 명령을 사용하여 사용자에서 원래 세션 정책의 설정을 해제하는 것입니다.

  • 다음 표에는 세션 정책에서 발생할 수 있는 몇 가지 오류 메시지가 요약되어 있습니다.

    동작

    오류 메시지

    문제 해결 작업

    세션 정책을 만들 수 없습니다.

    CREATE SESSION POLICY를 수행할 수 없습니다. 이 세션에 현재 데이터베이스가 없습니다. 〈USE DATABASE’를 호출하거나 정규화된 이름을 사용하십시오.

    CREATE SESSION POLICY를 실행하기 전에 데이터베이스를 지정하거나 CREATE SESSION POLICY 문에서 정규화된 오브젝트 이름을 사용하십시오.

    세션 정책을 만들 수 없습니다.

    SQL 액세스 제어 오류: 〈<스키마_이름>〉 스키마에 대한 작업 권한이 충분하지 않습니다.

    CREATE SESSION POLICY 문을 실행하는 역할이 SCHEMA 권한에 대한 CREATE SESSION POLICY가 있는지 확인하십시오.

    세션 정책을 만들 수 없습니다.

    SQL 컴파일 오류: <데이터베이스_이름> 데이터베이스가 없거나 권한이 없습니다.

    데이터베이스가 존재하고 CREATE SESSION POLICY 문을 실행하는 역할이 세션 정책이 존재해야 하는 스키마에 대한 USAGE 권한이 있는지 확인하십시오.

    describe 문을 실행할 수 없습니다.

    SQL 컴파일 오류: 〈<스키마_이름>〉 스키마가 없거나 권한이 없습니다.

    DROP SESSION POLICY 문을 실행하는 역할이 세션 정책에 대한 OWNERSHIP 권한 또는 ACCOUNT 권한에 대한 APPLY SESSION POLICY가 있는지 확인하십시오.

    세션 정책을 삭제할 수 없습니다.

    SQL 컴파일 오류: <정책_이름> 세션 정책이 없거나 권한이 없습니다.

    DROP SESSION POLICY 문을 실행하는 역할이 세션 정책에 대한 OWNERSHIP 권한이 있는지 확인하십시오.

    세션 정책을 삭제할 수 없습니다.

    세션 정책 <정책_이름>은 계정에 연결되므로 삭제할 수 없습니다.

    ALTER ACCOUNT 문이 있는 계정에서 세션 정책을 설정 해제하고 drop 문을 다시 시도하십시오.

    계정에 세션 정책을 설정할 수 없습니다.

    세션 정책 〈<정책_이름>은 <계정_이름> 계정에 이미 연결되어 있습니다.

    계정에는 활성 세션 정책이 하나만 있을 수 있습니다. 계정에 어떤 세션 정책을 설정해야 하는지 결정하십시오. . 필요한 경우 ALTER ACCOUNT 명령으로 계정에서 현재 세션 정책을 설정 해제한 다음, 다른 ALTER ACCOUNT 명령으로 계정에 대해 다른 세션 정책을 설정하십시오.

    시간 제한 값을 설정할 수 없습니다.

    SQL 컴파일 오류: 〈세션_유휴_시간 제한_분〉 속성에 대해 잘못된 값 〈<정수>〉

    세션 시간 제한 값(분)은 5240 (포함) 사이의 정수여야 합니다. . 세션 시간 제한에 유효한 정수를 선택하고 CREATE 또는 ALTER SESSION POLICY 문을 다시 실행하십시오.

    기존 세션 정책을 업데이트할 수 없습니다.

    SQL 컴파일 오류: <정책_이름> 세션 정책이 없거나 권한이 없습니다.

    세션 정책의 이름, ALTER SESSION POLICY 명령 구문, 그리고 세션 정책, 데이터베이스, 스키마에 대한 작업 권한을 확인하십시오.

맨 위로 이동