이번 포스팅에서는 Snowflake에서 Masking Policy와 Row Access Policy를 관리하는 방법에 대해 알아보겠습니다. Snowflake에서 데이터베이스와 권한을 어떻게 관리하는지 확인할 수 있습니다.
1. 데이터베이스 및 테이블 생성
먼저 실습을 위한 데이터베이스와 테이블을 생성합니다.
USE ROLE SYSADMIN;
CREATE DATABASE SALES_DB;
CREATE SCHEMA SALES_SCHEMA;
CREATE TABLE CUSTOMERS (
ID NUMBER,
NAME STRING,
EMAIL STRING,
COUNTRY_CODE STRING
);
INSERT INTO CUSTOMERS VALUES
(138763, 'ABC','ABC@gmail.com' ,'IN'),
(896731, 'DEF','DEF@stanford.edu','PL'),
(799521, 'GHI','GHI@outlook.co.uk','IE');
이렇게 하면 SALES_DB 데이터베이스와 CUSTOMERS 테이블이 생성되고, 고객 데이터가 삽입됩니다.
2. 권한 부여 및 역할 생성
2.1 Reader Role 생성 및 권한 부여
이제 분석가들이 데이터를 조회할 수 있도록 ANALYST 역할을 생성하고 권한을 부여합니다.
USE ROLE ACCOUNTADMIN;
GRANT USAGE ON DATABASE SALES_DB TO ROLE ANALYST;
GRANT USAGE ON SCHEMA SALES_DB.SALES_SCHEMA TO ROLE ANALYST;
GRANT SELECT ON TABLE SALES_DB.SALES_SCHEMA.CUSTOMERS TO ROLE ANALYST;
이 명령을 통해 ANALYST 역할을 가진 사용자는 CUSTOMERS 테이블에서 데이터를 조회할 수 있게 됩니다.
2.2 Masking Admin Role 생성
데이터 마스킹 및 접근 정책을 관리하는 MASKING_ADMIN 역할을 생성합니다.
CREATE ROLE MASKING_ADMIN;
GRANT USAGE ON DATABASE SALES_DB TO ROLE MASKING_ADMIN;
GRANT USAGE ON SCHEMA SALES_DB.SALES_SCHEMA TO ROLE MASKING_ADMIN;
GRANT CREATE MASKING POLICY, CREATE ROW ACCESS POLICY ON SCHEMA SALES_DB.SALES_SCHEMA to role MASKING_ADMIN;
GRANT APPLY MASKING POLICY, APPLY ROW ACCESS POLICY on account to role MASKING_ADMIN;
GRANT ROLE MASKING_ADMIN TO USER ADMIN;
이 역할은 데이터베이스 및 스키마에서 마스킹 정책을 만들고 적용할 수 있는 권한을 가지게 됩니다.
3. Masking Policy 생성 및 적용
이제 EMAIL 컬럼에 대해 마스킹 Policy 설정합니다.
USE ROLE MASKING_ADMIN;
USE SCHEMA SALES_DB.SALES_SCHEMA;
CREATE OR REPLACE MASKING POLICY EMAIL_MASK AS (VAL STRING) RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('ANALYST') THEN VAL
ELSE REGEXP_REPLACE(VAL,'.+\@','******@')
END;
ALTER TABLE CUSTOMERS MODIFY COLUMN EMAIL SET MASKING POLICY EMAIL_MASK;
이 정책은 ANALYST 역할을 가진 사용자가 이메일을 그대로 볼 수 있지만, 다른 역할을 가진 사용자는 이메일 주소의 앞부분이 마스킹됩니다.
3.1 Policy 검증
각 역할로 데이터를 조회하여 마스킹 정책을 확인해보겠습니다.
USE ROLE ANALYST;
SELECT * FROM CUSTOMERS;
USE ROLE SYSADMIN;
SELECT * FROM CUSTOMERS;
4. Row Access Policy 생성 및 적용
이제 간단한 Row Access Policy를 생성하여 ANALYST 역할에게만 데이터를 볼 수 있도록 설정합니다.
USE ROLE MASKING_ADMIN;
USE SCHEMA SALES_DB.SALES_SCHEMA;
CREATE OR REPLACE ROW ACCESS POLICY RAP AS (VAL VARCHAR) RETURNS BOOLEAN ->
CASE
WHEN 'ANALYST' = CURRENT_ROLE() THEN TRUE
ELSE FALSE
END;
ALTER TABLE CUSTOMERS ADD ROW ACCESS POLICY RAP ON (EMAIL);
5. Policy 검증 및 다국가 Row Access Policy 생성
CREATE TABLE TITLE_COUNTRY_MAPPING (
TITLE STRING,
COUNTRY_ISO_CODE STRING
);
INSERT INTO TITLE_COUNTRY_MAPPING VALUES ('ANALYST','PL');
GRANT SELECT ON TABLE TITLE_COUNTRY_MAPPING TO ROLE MASKING_ADMIN;
CREATE OR REPLACE ROW ACCESS POLICY CUSTOMER_POLICY AS (COUNTRY_CODE VARCHAR) RETURNS BOOLEAN ->
'SYSADMIN' = CURRENT_ROLE()
OR EXISTS (
SELECT 1 FROM TITLE_COUNTRY_MAPPING
WHERE TITLE = CURRENT_ROLE()
AND COUNTRY_ISO_CODE = COUNTRY_CODE
);
ALTER TABLE CUSTOMERS ADD ROW ACCESS POLICY CUSTOMER_POLICY ON (COUNTRY_CODE);
6. Policy 제거 및 리소스 정리
ALTER TABLE CUSTOMERS DROP ALL ROW ACCESS POLICIES;
DROP DATABASE SALES_DB;
이번 포스팅에서는 Snowflake에서 Masking Policy와 Row Access Policy를 생성하고 관리하는 방법에 대해 알아보았습니다. 중앙 집중식 정책 관리를 통해 데이터 접근 제어를 효과적으로 설정할 수 있다는 점이 매우 유용했습니다.
Reference
https://docs.snowflake.com/en/guides
'Snowflake' 카테고리의 다른 글
[Snowflake] Snowflake 클러스터링 키 및 클러스터링 된 테이블이란? (2) | 2024.10.12 |
---|---|
[Snowflake] Snowflake 마이크로 파티션 및 데이터 클러스터링이란? (2) | 2024.10.12 |
[Snowflake] Snowflake Multi-Cluster Warehouses란? (2) | 2024.10.12 |
[Snowflake] Snowflake에서 Virtual Warehouse 관리 실습하기 (0) | 2024.10.10 |
[Snowflake] Snowflake에서 RBAC 및 DAC 권한 부여 실습하기 (0) | 2024.10.06 |