Role-based Access Control (RBAC)
- Snowflakeは、ロールベースのアクセス制御(RBAC)を採用しており、アクセス権限や機能別にロールを作成し、それらのロールを別のロールに継承させたり、ユーザー対して付与することができる
- 例えば以下のような継承関係にあるロールを定義する

- 公開用ロールに仮想ウェアハウス(ANALYTICS_WH)の使用権限を与えてそのロールを参照用、管理者用ロールに継承させることで、全てのロールで仮想ウェアハウスを使用することができる
USE ROLE SECURITYADMIN;
-- ロールを作成する
CREATE ROLE ADMIN_ROLE; -- 管理者用ロール
CREATE ROLE VIEWER_ROLE; -- 参照用ロール
CREATE ROLE PUBLIC_ROLE; -- 公開用ロール
-- ROLE階層を構築
GRANT ROLE ADMIN_ROLE TO ROLE SYSADMIN;
GRANT ROLE VIEWER_ROLE TO ROLE ADMIN_ROLE;
GRANT ROLE PUBLIC_ROLE TO ROLE VIEWER_ROLE;
-- 仮想ウェアハウスは最下層のロールに付与するため、上位のロールでも利用可能
USE ROLE SYSADMIN;
CREATE WAREHOUSE ANALYTICS_WH
WITH WAREHOUSE_SIZE = 'XSMALL'
WAREHOUSE_TYPE = 'STANDARD'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE;
GRANT USAGE ON WAREHOUSE ANALYTICS_WH TO ROLE PUBLIC_ROLE;
将来の許可(ON FUTURE)
- Snowflakeの権限はオブジェクト(スキーマやテーブル)に対して付与するが、現在存在しない将来作成されるオブジェクトに対して権限を付与することができる
- 以下は、公開用ロールにデータベースと公開用スキーマ(PRODUCT_DATA)の使用権限を付与して、継承先のロールでも使用できるようにしている。参照用ロールは入力データ用スキーマ(SOURCE)の使用と将来作成されるテーブルの参照権限が与えられている。最後に管理者用ロールに読み書きを許可している
-- 公開用ロールにドメインDBと公開スキーマの使用権限を与える
GRANT USAGE ON DATABASE DOMAIN_DB TO ROLE PUBLIC_ROLE;
GRANT USAGE ON SCHEMA DOMAIN_DB.PRODUCT_DATA TO ROLE
PUBLIC_ROLE;
-- 公開用ロールに公開スキーマのテーブル(将来追加されるものも含む)の参照権限を
与える
GRANT SELECT ON FUTURE TABLES IN SCHEMA DOMAIN_DB.PRODUCT_DATA TO
ROLE PUBLIC_ROLE;
-- 参照用ロールにドメインDBの全部のスキーマ(将来追加されるものも含む)の使用と参照
権限を与える
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE DOMAIN_DB TO ROLE
VIEWER_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA DOMAIN_DB.SOURCE TO ROLE
VIEWER_ROLE;
-- 管理者用ロールには読み書き権限を与える
GRANT SELECT, INSERT, UPDATE, DELETE ON FUTURE TABLES IN SCHEMA
DOMAIN_DB.SOURCE TO ROLE ADMIN_ROLE;
GRANT SELECT, INSERT, UPDATE, DELETE ON FUTURE TABLES IN SCHEMA
DOMAIN_DB.PRODUCT_DATA TO ROLE ADMIN_ROLE;
任意アクセス制御(DAC)
- 各オブジェクトには所有者がおり、所有者はそのオブジェクトへのアクセスを許可することができる
- 以下は、各オブジェクトの所有権(OWNERSHIP)を管理者用ロールに付与している
-- 所有者権限を管理者ロールに与える
GRANT OWNERSHIP ON DATABASE DOMAIN_DB TO ROLE ADMIN_ROLE;
GRANT OWNERSHIP ON SCHEMA DOMAIN_DB.SOURCE TO ROLE
ADMIN_ROLE;
GRANT OWNERSHIP ON SCHEMA DOMAIN_DB.PRODUCT_DATA TO ROLE
ADMIN_ROLE;
DataMesh アーキテクチャをSnowflakeで実現する
- DataMeshアーキテクチャのドメイン所有権の原則では、ドメインチームがデータの責任を負うことが義務付けられており、分析データはドメインを中心に構成する必要がある。ドメイン内でデータの品質が担保され、説明が付与され、再利用可能になったデータをプロダクトデータとして公開する
- 今回例示したアクセス制御設計を参考にしてドメイン毎のオブジェクトの管理方法とプロダクトデータの公開を実装することができるようになる

※https://www.datamesh-architecture.com/より
