차등 개인정보 보호를 위한 개인정보 보호 정책 사용하기

이 항목에서는 데이터 공급자가 개인정보 보호정책을 사용하여 차등 개인정보 보호 를 구현하는 방법에 대해 설명합니다.

개인정보 보호정책 정보

차등 개인정보 보호를 사용하는 경우 Snowflake는 각 쿼리를 확인하여 쿼리를 실행하는 사용자와 관련된 개인정보 보호 예산 을 초과하는지 여부를 결정해야 합니다. 개인정보 보호정책을 통해 이를 수행할 수 있습니다. 데이터 공급자는 사용자를 개인정보 보호 예산과 연결하는 개인정보 보호 정책을 생성한 다음, 해당 정책을 테이블과 뷰에 할당하여 개인정보를 보호합니다.

분석가가 개인정보 보호정책이 있는 테이블에 대해 쿼리를 실행하면 Snowflake는 정책 본문을 평가하고 다음 중 하나를 수행합니다.

  • 정책에서 사용자를 개인정보 보호 예산과 연결하는 경우, Snowflake는 쿼리로 인해 발생하는 개인정보 손실 이 해당 개인정보 보호 예산을 초과하지 않도록 합니다. 쿼리가 성공적으로 실행되면 Snowflake는 쿼리로 인해 발생한 개인정보 손실을 사용자의 누적 개인정보 손실에 추가하여 후속 쿼리가 개인정보 보호 예산을 초과하지 않도록 합니다.

  • 정책에 따라 사용자가 제한 없이 테이블을 쿼리할 수 있는 경우, 결과에는 노이즈 가 포함되지 않으며 Snowflake는 쿼리로 인해 발생한 개인 정보 손실을 추적하지 않습니다.

개인정보 보호정책 모범 사례

단일 엔터티를 보호하기 위해 단일 개인정보 보호정책을 생성한 다음, 해당 엔터티에 대한 정보가 포함된 모든 테이블과 뷰에 개인정보 보호정책을 할당할 수 있습니다. 이는 해당 엔터티의 모든 개인정보 보호 예산을 하나의 개인정보 보호 정책으로 그룹화합니다. 모든 테이블과 뷰에 대해 별도의 개인정보 보호정책을 생성할 필요는 없습니다.

개인정보 보호정책 관련 작업하기

스키마에 대한 차등 개인정보 보호 구현은 3단계 프로세스입니다.

  1. 이름, 역할 또는 계정과 같은 조건에 따라 개인정보 보호 예산을 사용자와 연결하는 개인정보 보호정책을 만듭니다.

  2. 데이터에 대한 쿼리 또는 쿼리 집합이 쿼리를 실행하는 사용자와 관련된 개인정보 보호 예산을 초과하지 않도록 테이블 또는 뷰에 해당 개인정보 보호정책을 할당 합니다.

  3. 개인정보 보호 데이터에 SELECT 권한을 부여합니다. 분석가에게 데이터에 대한 전체 액세스 권한이 부여되므로, 테이블 또는 뷰에 개인정보 보호정책을 할당하기 전에 권한을 부여하지 마십시오.

차등 개인정보 보호 환경을 관리할 때 다음 작업도 수행할 수 있습니다.

개인정보 보호정책 만들기

새로운 개인정보 보호정책을 생성하기 위한 가장 기본적인 구문은 다음과 같습니다.

CREATE PRIVACY POLICY  <name>
  AS ( ) RETURNS PRIVACY_BUDGET -> <body>
Copy

여기서

  • name 은 개인정보 보호정책의 이름입니다.

  • AS ( ) RETURNS PRIVACY_BUDGET 는 정책의 서명 및 반환 유형입니다. 서명은 어떠한 인자도 허용하지 않으며 반환 유형은 내부 데이터 타입인 PRIVACY_BUDGET입니다. 모든 개인정보 보호정책의 서명 및 반환 유형은 동일합니다.

  • body 는 개인정보 보호정책이 개인정보 예산을 반환하는지 여부와 반환한다면 어떤 예산을 반환하는지를 결정하는 SQL 식입니다.

    본문의 SQL 식은 정책의 반환 값을 제어하기 위해 두 개의 함수를 호출합니다.

    NO_PRIVACY_POLICY

    쿼리가 개인정보 보호 정책이 할당된 테이블 또는 뷰에 제한 없이 액세스할 수 있도록 하려면 본문의 식을 사용하여 NO_PRIVACY_POLICY 함수를 호출합니다.

    PRIVACY_BUDGET

    정책에서 개인정보 보호 예산을 반환하려면 본문의 식을 사용하여 PRIVACY_BUDGET 함수를 호출하십시오.

NO_PRIVACY_POLICY 및 PRIVACY_BUDGET 함수에 대한 전체 구문은 CREATE PRIVACY POLICY 섹션을 참조하십시오.

예시 개인정보 보호정책

조건 없는 단일 개인정보 예산

항상 이름이 analysts 인 개인정보 보호예산을 반환하는 개인정보 보호정책 my_priv_policy 를 생성합니다.

CREATE PRIVACY POLICY my_priv_policy
  AS ( ) RETURNS PRIVACY_BUDGET ->
  PRIVACY_BUDGET(BUDGET_NAME=> 'analysts');
Copy
조건부 개인정보 보호정책

개인정보가 보호되는 테이블 또는 뷰에 무제한으로 액세스할 권한을 admin 에게 제공하는 동시에 다른 모든 사용자를 개인정보 보호 예산 analysts 와 연결하는 개인정보 보호정책 my_priv_policy 를 만듭니다.

CREATE PRIVACY POLICY my_priv_policy
  AS () RETURNS PRIVACY_BUDGET ->
    CASE
      WHEN CURRENT_USER() = 'ADMIN'
        THEN NO_PRIVACY_POLICY()
      ELSE PRIVACY_BUDGET(BUDGET_NAME => 'analysts')
    END;
Copy
계정 간 공유에 대한 조건부 개인정보 보호정책

다음을 수행하는 개인정보 보호정책 my_priv_policy 를 만듭니다.

  • admin 에 개인정보 보호가 설정된 테이블 또는 뷰에 대한 무제한 액세스를 허용합니다.

  • 개인정보 보호 예산 analysts 를 동일한 계정의 사용자에게 연결합니다.

  • 외부 계정 사용자와 연결된 개인정보 보호 예산의 이름을 지정하여 쉽게 식별할 수 있도록 합니다. 개인정보 보호 예산은 특정 외부 계정에 자동으로 네임스페이스가 지정되지만, 설명적인 명명 체계를 사용하면 개인정보 보호 예산을 관리하는 데 도움이 될 수 있습니다.

CREATE PRIVACY POLICY my_priv_policy
  AS () RETURNS PRIVACY_BUDGET ->
    CASE
      WHEN CURRENT_USER() = 'ADMIN'
        THEN NO_PRIVACY_POLICY()
      WHEN CURRENT_ACCOUNT() = 'YE74187'
        THEN PRIVACY_BUDGET(BUDGET_NAME => 'analysts')
      ELSE PRIVACY_BUDGET(BUDGET_NAME => 'external.' || CURRENT_ACCOUNT())
    END;
Copy

정책 본문에서 컨텍스트 함수 사용하기

개인정보 보호정책 본문에 컨텍스트 함수 를 포함시켜 차등 비공개 쿼리가 실행되는 컨텍스트에 따라 동작이 달라지도록 할 수 있습니다.

개인정보 보호정책의 본문에서는 다음 컨텍스트 함수를 사용할 수 있습니다.

컨텍스트 함수

설명

CURRENT_ACCOUNT

사용자의 현재 세션에 사용 중인 계정 로케이터를 반환합니다.

CURRENT_DATABASE

개인정보 보호정책에 의해 보호되는 테이블이 포함된 데이터베이스를 반환합니다.

CURRENT_ORGANIZATION_NAME

사용자의 현재 세션에 사용 중인 조직의 이름을 반환합니다.

CURRENT_ROLE

현재 세션에 사용 중인 역할의 이름을 반환합니다.

CURRENT_SCHEMA

개인정보 보호정책에 의해 보호되는 테이블이 포함된 스키마를 반환합니다.

CURRENT_USER

쿼리를 실행하는 사용자의 이름을 반환합니다.

INVOKER_ROLE

실행 중인 역할의 이름을 반환합니다.

INVOKER_SHARE

INVOKER_SHARE 함수가 호출된 테이블 또는 뷰에 직접적으로 액세스한 공유의 이름을 반환합니다.

CURRENT_USER 와 같은 컨텍스트 함수는 문자열을 반환하므로 이를 사용한 비교는 대/소문자를 구분합니다. 대/소문자를 구분하지 않고 비교하려면 LOWER 를 사용하여 문자열을 모두 소문자로 변환하면 됩니다.

개인정보 보호정책 수정

개인정보 보호정책을 수정하려면 ALTER PRIVACY POLICY 명령을 사용합니다. 정책의 이름을 바꾸거나, 내용이나 주석을 수정할 수 있습니다.

예를 들어, 기존 개인정보 보호정책 my_priv_policy 의 본문을 항상 예산 external_analysts 를 반환하는 새 본문으로 바꾸려면 다음을 실행합니다.

ALTER PRIVACY POLICY my_priv_policy SET BODY ->
  PRIVACY_BUDGET(BUDGET_NAME => 'external_analysts');
Copy

개인정보 보호정책 할당

하나 이상의 테이블이나 뷰에 개인정보 보호정책을 적용하여 차등 개인정보 보호를 제공할 수 있습니다. 테이블이나 뷰에는 개인정보 보호정책을 1개만 할당할 수 있습니다.

테이블 또는 뷰에 개인정보 보호정책을 할당하려면 ALTER TABLE 또는 ALTER VIEW 명령의 ADD PRIVACY POLICY 절을 사용합니다. 구문은 다음과 같습니다.

ALTER { TABLE | [ MATERIALIZED ] VIEW } <name>
  ADD PRIVACY POLICY <policy_name>
  { NO ENTITY KEY | ENTITY KEY ( <column_name> ) }
Copy

여기서

  • name 은 테이블 또는 뷰의 이름을 지정합니다.

  • policy_name 은 개인정보 보호정책의 이름을 지정합니다.

  • column_name 은 테이블이나 뷰의 엔터티 키를 지정합니다. 엔터티 키 는 테이블 또는 뷰 내에서 엔터티를 고유하게 식별하는 열입니다.

대부분의 경우 엔터티 수준의 개인정보 보호를 구현하기 위해 엔터티 키를 정의해야 하지만, 엔터티에 속한 데이터가 여러 행에 존재할 수 있는지 여부를 고려하지 않고 개별 행을 보호하기 위해 NO ENTITY KEY 절을 사용할 수도 있습니다. 자세한 내용은 엔터티 수준 개인정보 보호 정보 섹션을 참조하십시오.

예를 들어, 엔터티 키가 email 열인 테이블 t1my_priv_policy 정책을 할당하려면 다음을 실행합니다.

ALTER TABLE t1 ADD PRIVACY POLICY my_priv_policy ENTITY KEY (email);
Copy

개인정보 보호정책 또는 엔터티 키 바꾸기

개인정보 보호정책 또는 엔터티 키를 바꾸는 권장 방법은 동일한 ALTER TABLE 또는 ALTER VIEW 명령에 ADD 및 DROP 절을 모두 사용하는 것입니다. 이렇게 하면 두 작업이 동일한 트랜잭션에서 이루어지므로 보호에 공백이 생기지 않고 원자 단위로 변경할 수 있습니다.

동일한 정책을 유지하면서 엔터티 키를 변경하려면 정책을 삭제한 다음 새 엔터티 키로 다시 추가해야 합니다.

예를 들어, 이미 개인정보 보호정책으로 보호되는 테이블에 새 개인정보 보호정책을 할당하려면:

ALTER TABLE finance.accounting.customers
  DROP PRIVACY POLICY priv_policy_1,
  ADD PRIVACY POLICY priv_policy_2 ENTITY KEY (email);
Copy

1개 문의 테이블이나 뷰에서 개인정보 보호정책을 분리한 다음 다른 문의 테이블이나 뷰에 새 정책을 설정할 수도 있습니다. 이 방법을 선택하면 한 정책을 분리하고 다른 정책을 할당하는 사이에 개인정보 보호정책으로 테이블이 보호되지 않습니다. 사용자에게 여전히 데이터에 대한 SELECT 권한이 있는 경우 쿼리는 이 기간 동안 민감한 데이터에 액세스할 수 있습니다.

개인정보 보호정책 분리

테이블 또는 뷰에서 개인정보 보호정책을 분리하려면 ALTER TABLE 또는 ALTER VIEW 명령의 DROP PRIVACY POLICY 절을 사용합니다. 이 명령을 실행한 후에는 테이블이나 뷰의 개인정보가 더 이상 보호되지 않습니다. 구문은 다음과 같습니다.

ALTER { TABLE | [ MATERIALIZED ] VIEW } <name> DROP PRIVACY POLICY <policy_name>
Copy

여기서

  • name 은 테이블 또는 뷰의 이름을 지정합니다.

  • policy_name 은 개인정보 보호정책의 이름을 지정합니다.

예를 들어, finance.accounting.customers 테이블에서 my_priv_policy 개인정보 보호정책을 분리하려면:

ALTER TABLE finance.accounting.customers
  DROP PRIVACY POLICY my_priv_policy;
Copy

개인정보 보호정책 모니터링

개인정보 보호정책의 사용을 모니터링하기 위해 계정의 모든 개인정보 보호정책을 나열하거나 특정 개인정보 보호정책으로 보호되는 테이블 및 뷰를 결정하거나 현재 테이블 또는 뷰에 할당된 모든 정책을 나열할 수 있습니다.

모든 개인정보 보호정책 나열

공유 SNOWFLAKE 데이터베이스의 Account Usage 스키마에서 PRIVACY_POLICIES 뷰를 사용할 수 있습니다. 이 뷰는 Snowflake 계정의 모든 개인정보 보호정책에 대한 카탈로그 입니다. 예:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.PRIVACY_POLICIES
  ORDER BY POLICY_NAME;
Copy

개인정보 보호정책 참조 식별하기

POLICY_REFERENCES Information Schema 테이블 함수는 개인정보 보호정책에 의해 보호되는 테이블과 뷰를 식별할 수 있습니다. 다음과 같이 두 가지 다른 구문 옵션이 있습니다.

  1. 지정된 개인정보 보호정책이 설정된 각 오브젝트(즉, 테이블 또는 뷰)에 대한 행을 반환합니다.

    USE DATABASE my_db;
    USE SCHEMA information_schema;
    SELECT policy_name,
           policy_kind,
           ref_entity_name,
           ref_entity_domain,
           ref_column_name,
           ref_arg_column_names,
           policy_status
    FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.privpolicy'));
    
    Copy
  2. my_table 이라는 테이블에 할당된 각 정책에 대한 행을 반환합니다. POLICY_KIND 열을 사용하여 어떤 정책이 개인정보 보호정책인지 확인합니다.

    USE DATABASE my_db;
    USE SCHEMA information_schema;
    SELECT policy_name,
           policy_kind,
           ref_entity_name,
           ref_entity_domain,
           ref_column_name,
           ref_arg_column_names,
           policy_status
    FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));
    
    Copy

권한과 명령

다음 하위 섹션에서는 개인정보 보호정책 관리에 도움이 되는 정보를 제공합니다.

개인정보 보호정책 권한

Snowflake는 개인정보 보호정책 오브젝트에 대해 다음 권한을 지원합니다.

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

권한

사용법

APPLY

테이블 또는 뷰에 개인정보 보호정책을 할당하거나 테이블 또는 뷰에서 개인정보 보호정책을 분리할 수 있습니다.

OWNERSHIP

개인정보 보호정책의 대부분 속성을 변경하는 데 필요합니다. 개인정보 보호정책의 소유권을 이전할 수 있으며, 이를 통해 개인정보 보호정책에 대한 모든 권한을 부여할 수 있습니다.

개인정보 보호정책 DDL 참조

Snowflake는 개인정보 보호정책 생성과 관리를 위해 다음 DDL을 지원합니다.

DDL 명령, 작업 및 권한 요약

다음 테이블은 개인정보 보호정책 권한과 DDL 작업 사이의 관계를 요약하여 보여줍니다.

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

작업

필요한 권한

개인정보 보호정책 만들기

동일한 스키마에서 CREATE PRIVACY POLICY 권한이 있는 역할.

개인정보 보호정책 변경

개인정보 보호정책에 대한 OWNERSHIP 권한이 있는 역할.

개인정보 보호정책 설명

다음 중 하나

  • 전역 APPLY PRIVACY POLICY 권한이 있는 역할.

  • 개인정보 보호정책에 대한 OWNERSHIP 권한이 있는 역할.

  • 개인정보 보호정책에 대한 APPLY 권한이 있는 역할.

개인정보 보호정책을 삭제합니다.

개인정보 보호정책에 대한 OWNERSHIP 권한이 있는 역할.

개인정보 보호정책을 표시합니다.

다음 중 하나

  • 개인정보 보호정책이 있는 스키마에 대한 USAGE 권한이 있는 역할.

  • 계정에 대한 APPLY PRIVACY POLICY가 있는 역할.

테이블이나 뷰에 개인정보 보호정책을 할당하거나 분리합니다.

다음 중 하나

  • 계정에 대한 APPLY PRIVACY POLICY 권한이 있는 역할.

  • 개인정보 보호정책에 대한 APPLY 권한 및 테이블 또는 뷰에 대한 OWNERSHIP 권한이 있는 역할.