Snowflake 세션 및 세션 정책

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

이 항목의 내용:

Snowflake 세션

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

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

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

Snowsight 세션

Snowflake는 Snowsight 의 각 워크시트에 대해 새 세션을 만듭니다. 워크시트 세션은 워크시트를 생성하는 사용자에게 적용되는 세션 정책을 적용합니다.

조심

ABORT_DETACHED_QUERY 매개 변수를 true로 설정했는데도 세션이 종료되고 사용자가 로그아웃해도 활성 쿼리가 취소되지 않습니다.

Classic Console 세션

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

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

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

참고

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

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

세션 정책

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

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

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

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

  • Classic Console 및 Snowsight 에 대한 SESSION_UI_IDLE_TIMEOUT_MINS

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

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

고려 사항

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

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

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

  • 세션 정책 사용 추적:

    • Account Usage SESSION_POLICIES 뷰를 쿼리하여 Snowflake 계정의 각 세션 정책에 대한 행을 반환합니다.

    • Information Schema 테이블 함수 POLICY_REFERENCES 를 사용하여 지정된 세션 정책에 할당된 각 사용자에 대한 행과 Snowflake 계정에 할당된 세션 정책에 대한 행을 반환합니다.

      현재, 세션 정책에는 다음 구문만 지원됩니다.

      POLICY_REFERENCES( POLICY_NAME => '<session_policy_name>' )
      
      Copy

      여기서 session_policy_name 은 세션 정책의 정규화된 이름입니다.

      예를 들어, 다음 쿼리를 실행하여 my_db 라는 데이터베이스와 my_schema 라는 스키마에 저장되는 session_policy_prod_1 이라는 세션 정책이 할당된 각 사용자에 대한 행을 반환합니다.

      SELECT *
      FROM TABLE(
        MY_DB.INFORMATION_SCHEMA.POLICY_REFERENCES(
          POLICY_NAME => 'my_db.my_schema.session_policy_prod_1'
        )
      );
      
      Copy

제한 사항

향후 권한 부여

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

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

세션 정책 구현하기

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

이러한 단계에서는 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;
Copy

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

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

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

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

  • 계정에 대한 APPLY SESSION POLICY 권한

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

USE ROLE SECURITYADMIN;

GRANT USAGE ON DATABASE mydb TO ROLE policy_admin;

GRANT USAGE, CREATE SESSION POLICY ON SCHEMA mydb.policies TO ROLE policy_admin;

GRANT APPLY SESSION POLICY ON ACCOUNT TO ROLE policy_admin;
Copy

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

GRANT APPLY SESSION POLICY ON USER jsmith TO ROLE policy_admin;
Copy

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

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

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

USE ROLE POLICY_ADMIN;

CREATE SESSION POLICY mydb.policies.session_policy_prod_1
  SESSION_IDLE_TIMEOUT_MINS = 60
  SESSION_UI_IDLE_TIMEOUT_MINS = 60
  COMMENT = 'Session policy for the prod_1 environment'
;
Copy

여기서

mydb.policies.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 mydb.policies.session_policy_prod_1;

ALTER USER jsmith SET SESSION POLICY my_database.my_schema.session_policy_prod_1_jsmith;
Copy

중요

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

ALTER ACCOUNT UNSET session policy;

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_2;
Copy

5단계: 대상 계정에 세션 정책 복제

세션 정책과 이 정책의 참조(즉, 사용자 또는 계정에 대한 할당)는 데이터베이스 복제 및 계정 복제를 사용하여 원본 계정에서 대상 계정으로 복제할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

세션 정책 관리하기

세션 정책 권한 참조

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

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

권한

사용법

CREATE

스키마에서 새 세션 정책을 생성할 수 있습니다.

APPLY SESSION POLICY

계정 또는 사용자 수준에서 세션 정책을 적용할 수 있습니다.

OWNERSHIP

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

DDL 명령, 작업 및 권한 요약

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

작업

필요한 권한

세션 정책 만들기

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

세션 정책 변경

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

세션 정책 삭제

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

세션 정책 설명

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

세션 정책 표시

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

세션 정책 설정 및 설정 해제

계정의 경우, 계정에 대한 APPLY SESSION POLICY 권한과 세션 정책에 대한 OWNERSHIP 권한이 있는 역할 또는 계정에 대한 APPLY SESSION POLICY 권한과 특정 세션 정책에 대한 APPLY ON SESSION POLICY 권한이 있는 역할.

사용자의 경우, USER <사용자 이름> 권한에 대한 APPLY SESSION POLICY가 있는 역할.

세션 정책 DDL 참조

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

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

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;
Copy
ALTER ACCOUNT UNSET SESSION POLICY;
Copy

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

ALTER USER jsmith SET SESSION POLICY mydb.policies.session_policy_prod_1_jsmith;
Copy
ALTER USER jsmith UNSET SESSION POLICY;
Copy

세션 정책 문제 해결하기

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

    해결 방법은 이 항목 에서와 같이 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 컴파일 오류: 〈<스키마_이름>〉 스키마가 없거나 권한이 없습니다.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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