Snowflake 권한
Snowflake 권한 (Snowflake permissions)
Snowflake에서 권한은 서로 다른 데이터베이스 객체에 대해 특정 작업을 수행할 수 있는 사용자를 제어하는 데 사용돼요. SQL 문으로 Snowflake 데이터베이스의 권한을 관리할 수 있어요.
출처: 문서
본문
Snowflake 계정 설정 (Set up Snowflake account)
이 섹션은 Snowflake 안에서 권한과 롤을 설정하는 방법을 설명해요. Snowflake에서는 SQL 명령으로 이러한 작업을 수행하고, Snowflake 생태계 안에서 데이터 웨어하우스와 접근 제어를 설정하게 돼요.
1. 데이터베이스 설정 (Set up databases)
use role sysadmin;
create database raw;
create database analytics;
2. 웨어하우스 설정 (Set up warehouses)
create warehouse loading
warehouse_size = xsmall
auto_suspend = 3600
auto_resume = false
initially_suspended = true;
create warehouse transforming
warehouse_size = xsmall
auto_suspend = 60
auto_resume = true
initially_suspended = true;
create warehouse reporting
warehouse_size = xsmall
auto_suspend = 60
auto_resume = true
initially_suspended = true;
3. 롤과 웨어하우스 권한 설정 (Set up roles and warehouse permissions)
use role securityadmin;
create role loader;
grant all on warehouse loading to role loader;
create role transformer;
grant all on warehouse transforming to role transformer;
create role reporter;
grant all on warehouse reporting to role reporter;
4. 사용자 생성, 롤에 배정 (Create users, assigning them to their roles)
모든 사람과 애플리케이션은 각자 별도의 사용자를 갖고 올바른 롤에 배정돼요.
create user stitch_user -- or fivetran_user
password = '_generate_this_'
default_warehouse = loading
default_role = loader;
create user claire -- or amy, jeremy, etc.
password = '_generate_this_'
default_warehouse = transforming
default_role = transformer
must_change_password = true;
create user dbt_cloud_user
password = '_generate_this_'
default_warehouse = transforming
default_role = transformer;
create user looker_user -- or mode_user etc.
password = '_generate_this_'
default_warehouse = reporting
default_role = reporter;
-- then grant these roles to each user
grant role loader to user stitch_user; -- or fivetran_user
grant role transformer to user dbt_cloud_user;
grant role transformer to user claire; -- or amy, jeremy
grant role reporter to user looker_user; -- or mode_user, periscope_user
5. loader가 데이터를 로드하게 하기 (Let loader load data)
롤에 raw 데이터베이스에서 일방적으로(독점적으로) 작업할 권한을 주세요.
use role sysadmin;
grant all on database raw to role loader;
6. transformer가 데이터를 변환하게 하기 (Let transformer transform data)
transformer 롤은 raw 데이터를 읽을 수 있어야 해요. 데이터가 아직 로드되기 전이라면 다음을 실행할 수 있어요:
grant usage on database raw to role transformer;
grant usage on future schemas in database raw to role transformer;
grant select on future tables in database raw to role transformer;
grant select on future views in database raw to role transformer;
이미 raw 데이터베이스에 데이터가 로드되어 있다면 권한을 갱신하기 위해 다음도 실행해야 해요:
grant usage on all schemas in database raw to role transformer;
grant select on all tables in database raw to role transformer;
grant select on all views in database raw to role transformer;
transformer는 analytics 데이터베이스에서도 생성할 수 있어야 해요:
grant all on database analytics to role transformer;
7. reporter가 변환된 데이터를 읽게 하기 (Let reporter read the transformed data)
이 문서의 이전 버전은 dbt의 hooks로 구현하길 권장했지만, 이 방식은 한 번만 실행하면 되는(one-off) 문장으로 처리할 수 있어요.
grant usage on database analytics to role reporter;
grant usage on future schemas in database analytics to role reporter;
grant select on future tables in database analytics to role reporter;
grant select on future views in database analytics to role reporter;
다시 말하지만, analytics 데이터베이스에 이미 데이터가 있다면 다음을 실행해야 해요:
grant usage on all schemas in database analytics to role reporter;
grant select on all tables in database analytics to role reporter;
grant select on all views in database analytics to role reporter;
8. 유지보수 (Maintain)
새 사용자가 추가되면 올바른 롤에 넣는 것을 잊지 마세요! 나머지는 그 future grants 덕분에 자동으로 상속돼요. 더 많은 논의와 레거시 정보는 Discourse 글을 참고하세요.
Snowflake 권한 예시 (Example Snowflake permissions)
다음 예시는 권한을 관리할 때 사용할 수 있는 SQL 문을 보여줘요. warehouse_name, database_name, role_name은 플레이스홀더라서 조직의 명명 규칙에 맞게 바꿔 사용하면 돼요.
grant all on warehouse warehouse_name to role role_name;
grant usage on database database_name to role role_name;
grant create schema on database database_name to role role_name;
grant usage on schema database.an_existing_schema to role role_name;
grant create table on schema database.an_existing_schema to role role_name;
grant create view on schema database.an_existing_schema to role role_name;
grant usage on future schemas in database database_name to role role_name;
grant monitor on future schemas in database database_name to role role_name;
grant select on future tables in database database_name to role role_name;
grant select on future views in database database_name to role role_name;
grant usage on all schemas in database database_name to role role_name;
grant monitor on all schemas in database database_name to role role_name;
grant select on all tables in database database_name to role role_name;
grant select on all views in database database_name to role role_name;
더 알아보기 (Learn more)
- Snowflake 공식 권한 문서를 참고하세요: Snowflake GRANT documentation.
- Snowflake 설정 관련 논의는 Setting up Snowflake: the exact grant statements we run Discourse 글을 참고하세요.