[Snowflake] 사용자 권한 부여(GRANT)

Jaewon Lim·2025년 2월 14일
0

Snowflake❄️

목록 보기
4/7
post-thumbnail

Intro

데이터를 적재한 웨어하우스에 다른 사용자들이 접근 권한을 해서, 분석 및 대시보드 작성, 테이블 생성 등 다양한 작업을 할 수 있는 환경을 구축해주는 과정이다.

순서

1.유저 생성

✅ 권한을 줄 특정 사용자를 생성하는 단계이다.

CREATE USER Jaewon
    PASSWORD = '123123'
    DEFAULT_ROLE = myrole
    DEFAULT_WAREHOUSE = COMPUTE_WH
    MUST_CHANGE_PASSWORD = TRUE;

1.1 유저 로그인

✅ 만들어진 사용자 Jaewon이 웨어하우스에 접근하기 위한 과정

  • Admin이 만들어준 Username(Jaewon) 과 초기 Password(123123) 을 입력 후 Sign in 한다.
  • Admin이 MUST_CHANGE_PASSWORD 를 설정해 두었기에, 가입 후 비밀번호를 초기화 해주어야한다.

  • 비밀번호 초기화 이후, 데이터를 제공해주는 Admin의 URL이 필요하다.
  • 데이터를 제공해주는 Admin의 URL은 Admin->Accounts->Manage URLs 에서 확인이 가능하다.

2. 역할 생성

역할(ROLE)을 생성하는 단계이다. 역할을 생성하고 사용자가 어떤 행동을 할 수 있는지 권한을 부여한다.

-- ROLE 생성
CREATE ROLE myrole;
-- ROLE 사용
USE ROLE myrole;

--DB 사용 권한 부여
GRANT USAGE ON DATABASE PROJECT TO ROLE myrole;
--스키마 사용 권한 부여
GRANT USAGE ON SCHEMA PROJECT.MY_SCHEMA TO ROLE myrole;

-- 특정 테이블(ACCOUNTS_SCHOOL)의 조회를 할 수 있게 해주는 권한 부여
GRANT SELECT ON TABLE PROJECT.MY_SCHEMA.ACCOUNTS_SCHOOL TO ROLE myrole;
-- 모든 테이블을 조회할 수 있는 권한 부여
GRANT SELECT ON ALL TABLES IN SCHEMA PROJECT.MY_SCHEMA TO ROLE myrole;

3. 웨어하우스 사용 권한 부여

역할(ROLE)을 부여받은 사용자가 실질적으로 쿼리를 작업할 수 있는 권한 부여하는 단계이다.

❓ 이 과정이 이해가 가질 않았던 부분 중 하나이다. 역할(Role)을 하나씩 추가로 만들 때 추가되는 역할마다 웨어하우스 사용&운영 권한을 주어야 실행이 가능하다. 역할을 준다해서 실행이 되는것이 아니라 웨어하우스 권한까지 직접 주어야 실행이 가능하다. 즉, 데이터를 사용하며 Admin의 웨어하우스의 비용을 사용하기 위해 다른 사용자들에게 허용을 해주어야 한다.

GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE myrole;
  • myrole이라는 권한을 부여받은 jaewon 사용자는 Admin의 위의 쿼리로부터 허용을 받아야한다.
REVOKE USAGE ON WAREHOUSE COMPUTE_WH FROM ROLE myrole;
  • myrole 권한을 부여받은 사용자들은 위의 쿼리로부터 더이상 웨어하우스 사용이 불가능해진다.

  • 위 사진은 권한을 부여받은 특정 사용자의 역할들이다.

  • 위 사진은 Admin의 관리계정 역할들이다.

3.1 웨어하우스 운영 권한 부여

✅ 특정 사용자들이 웨어하우스를 운영(즉, 일시 중단 또는 재개) 할 수 있다.

GRANT OPERATE ON WAREHOUSE COMPUTE_WH TO ROLE myrole;

4. 추가 역할 생성

  • 예를들어 기존 myrole이외에 your_role 이라는 역할을 추가한다고 해보자. 두 개의 역할을 동시에 만들어 같은 권한을 주는 것은 불가능하다. 하지만 역할 계승은 가능하다.
GRANT ROLE myrole TO ROLE your_role

권한 설정

1. 레벨 보안

1. 컬럼 레벨 보안(Column Level Security)

  • 테이블 내의 특정 컬럼을 사용자나 특정 역할에만 접근 가능하게 하는 것
  • 보통 개인 정보 등에 해당하는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용
    • 가장 좋은 방법은 그런 컬럼을 별도 테이블로 구성하는 것
    • 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템에 로딩 하지 않음

2. 레코드 레벨 보안(Row Level Security)

  • 테이블 내의 특정 레코드를 특정 사용자나 특정 역할에만 접근 가능하게 하는 것
  • 특정 사용자/그룹의 특정 테이블 대상 SELECT,UPDATE,DELETE 작업에 추가 조건을 다는 형태로 동작
    • 가장 좋은 방법은 그런 컬럼을 별도 테이블로 구성하는 것
    • 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템에 로딩 하지 않음

2. Data Governance

필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스. 품질 보장데이터 관련 법규 준수가 주 목적!

주요 기능

  • Object Tagging
  • Data Classification
  • Tag Based Masking Policies
  • Access History
  • Object Dependencies

OWNERSHIP

가장 강력한 권한으로, 객체의 소유자로서 할 수 있는 모든 작업을 말한다. 처음엔 ACCOUNTADMIN이 갖고 있다.

  • 수정 및 관리 : 수정 삭제 가능. 예를 들어, 테이블의 구조를 변경하거나, 뷰를 업데이트, 스키마 설정 변경을 할 수 있다.
  • 권한 부여 및 회수 : 객체에 대한 권한을 다른 사용자나 역할에게 부여하거나 회수
  • 전송 : 소유권을 다른 역할로 전송할 수 있으며, 이는 객체 관리의 책임을 다른 사용자나 역할에게 이전하는 것을 가능하게 한다.

❓ 특이 사항

1. Admin 테이블 REFRESH

스테이지에서 테이블로 새로운 데이터 업로드 시, 권한을 부여한 사용자들에게도 보이게 하기 위해선 ROLE 에 대한 GRANT 명령문을 다시 실행시켜줘야한다.

GRANT SELECT ON ALL TABLES IN SCHEMA PROJECT.MY_SCHEMA TO ROLE myrole;
  • myrole 에 대한 권한을 부여받은 모든 사용자들에게 새로 업로드 된 테이블을 보여준다.

⭐⭐ 2. 특정 사용자에게 다른 역할에 권한을 부여하도록 허용

나와 공동 작업을 하는 파트너가 있다고 가정해보자. 기존 나의 최고 역할(ACCOUNTADMIN)에 OWNERSHIP이 있다. 이런 경우 새로운 역할을 만들고 OWNERSHIP 권한을 부여하는 방향으로 진행한다. OWNERSHIP 권한을 가진 역할은 테이블을 수정, 삭제, 권한 부여 및 회수 등을 할 수 있지만, 시스템에서 보안을 위해 설정 제한을 넘어서는 행동(DROP)은 제한된다.

-- 새 역할 생성
CREATE ROLE partner_role;
-- 권한 부여
GRANT OWNERSHIP ON SCHEMA my_schema TO partner_role WITH GRANT OPTION;
-- 역할 할당
GRANT partner_role TO my_partner;

3. Warehouse 를 다중으로 사용하는 이유?

  • 작업 분리 : 각 웨어하우스는 독립적인 컴퓨팅 리소스를 가지고 있어, 다양한 작업을 동시에 수행하면서도 서로의 성능에 영향을 주지 않는다. 하나의 웨어하우스는 대용량 데이터 처리용, 다른 하나는 경량의 실시간 분석용으로 사용할 수 있다.

  • 성능 최적화 : 다른 종류의 작업은 서로 다른 리소스 요구 사항을 가질 수 있다. 예를 들어, 데이터 로딩과 데이터 쿼리는 서로 다른 성능 최적화가 필요할 수 있다.

  • 비용 관리 : 작업의 우선순위나 중요도에 따라 다른 사이즈의 웨어하우스를 선택하여 비용을 효과적으로 관리할 수 있다. 예를 들어, 비용을 절감하기 위해 비중요한 배치 작업에는 작은 웨어하우스를, 중요한 실시간 분석에는 큰 웨어하우스를 사용할 수 있다.

  • 동적 확장성 : 사용량이 많은 시간대에는 더 큰 웨어하우스를 활성화, 사용량이 적은 시간에는 작은 웨어하우스 사용하거나 일시정지

  • 보안 및 권한 관리 : 다른 웨어하우스를 사용함으로써 데이터와 작업에 대한 접근을 세분화하고 보안을 강화.

GRANT OPERATE ON WAREHOUSE COMPUTE_WH TO ROLE myrole WITH GRANT OPTION;

4. UNDROP SCHEMA

  • 스키마 전체를 DROP 했을 시, 하루 이내 복구 가능
UNDROP SCHEMA MY_SCHEMA

참고 자료

업로드중..

https://docs.snowflake.com/ko/sql-reference/sql/grant-privilege
https://docs.snowflake.com/ko/sql-reference/sql/undrop-schema

0개의 댓글