Snowflakeのアクセス制御はRBAC(Role-Based Access Control)を基盤としています。 すべての権限はロールに付与され、ユーザーはロールを通じてオブジェクトにアクセスします。 本記事では、システム定義ロールの階層構造、カスタムロールの設計パターン、GRANT/REVOKEの構文を体系的に解説します。
SnowflakeのRBACでは、権限(Privilege)はオブジェクトに対して定義され、ロールに付与されます。 ユーザーには直接権限を付与できず、必ずロールを介してアクセスします。 ロールは他のロールにGRANTすることで階層構造を形成し、上位ロールは下位ロールの権限を継承します。
アクセス制御モデル:
[ユーザー] ──(USE ROLE)──→ [ロール] ──(GRANT)──→ [権限] ──→ [オブジェクト]
※ ユーザーに直接権限を付与することはできない
※ ロールは別のロールにGRANTして階層化できるSnowflakeには5つのシステム定義ロールがあり、固定の階層構造を形成しています。 上位ロールは下位ロールの権限をすべて継承します。
システム定義ロール階層:
ACCOUNTADMIN
/ \
SYSADMIN SECURITYADMIN
│ │
│ USERADMIN
│ │
└────── PUBLIC ────┘
ACCOUNTADMIN : アカウント全体の最上位管理者
SYSADMIN : ウェアハウス・DB・スキーマ等のオブジェクト管理
SECURITYADMIN : ロール・権限・GRANTの管理(MANAGE GRANTS権限)
USERADMIN : ユーザーとロールの作成・管理
PUBLIC : 全ユーザーに自動付与される最下位ロール| ロール | 主な責務 | 付与されている主要権限 |
|---|---|---|
| ACCOUNTADMIN | アカウント全体の管理 | SYSADMIN+SECURITYADMINの全権限、課金管理、Resource Monitor作成 |
| SYSADMIN | オブジェクトの作成・管理 | CREATE WAREHOUSE / DATABASE / SCHEMA 等 |
| SECURITYADMIN | アクセス制御の管理 | MANAGE GRANTS(他ロールのGRANTを管理)、USERADMINの権限を継承 |
| USERADMIN | ユーザーとロールの作成 | CREATE USER / ROLE |
| PUBLIC | 全ユーザーの基本ロール | なし(明示的にGRANTされたものだけ) |
実運用では業務要件に応じたカスタムロールを作成します。 カスタムロールはSYSADMINの配下に接続することがベストプラクティスです。
カスタムロール階層の設計例:
ACCOUNTADMIN
/ \
SYSADMIN SECURITYADMIN
/ \ │
ETL_ADMIN ANALYST_ADMIN USERADMIN
│ │ │
ETL_ROLE ANALYST_ROLE PUBLIC
│ │
ETL_DEV ANALYST_RO
※ すべてのカスタムロールがSYSADMIN配下に
接続されている(孤立ロールなし)-- カスタムロール作成とSYSADMIN配下への接続
CREATE ROLE analyst_role
COMMENT = 'データ分析チーム用ロール';
-- SYSADMINの配下に接続(ベストプラクティス)
GRANT ROLE analyst_role TO ROLE SYSADMIN;
-- 必要な権限を付与
GRANT USAGE ON DATABASE analytics_db TO ROLE analyst_role;
GRANT USAGE ON SCHEMA analytics_db.public TO ROLE analyst_role;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics_db.public TO ROLE analyst_role;
GRANT SELECT ON FUTURE TABLES IN SCHEMA analytics_db.public TO ROLE analyst_role;
GRANT USAGE ON WAREHOUSE analyst_wh TO ROLE analyst_role;
-- ユーザーにロールを付与
GRANT ROLE analyst_role TO USER tanaka;-- オブジェクト権限のGRANT
GRANT SELECT ON TABLE my_db.public.sales TO ROLE analyst_role;
GRANT INSERT, UPDATE ON TABLE my_db.public.reports TO ROLE etl_role;
GRANT USAGE ON WAREHOUSE etl_wh TO ROLE etl_role;
GRANT CREATE TABLE ON SCHEMA my_db.staging TO ROLE etl_role;
-- データベース・スキーマレベルのGRANT
GRANT USAGE ON DATABASE my_db TO ROLE analyst_role;
GRANT USAGE ON ALL SCHEMAS IN DATABASE my_db TO ROLE analyst_role;
-- FUTURE GRANTs(将来作成されるオブジェクトにも適用)
GRANT SELECT ON FUTURE TABLES IN SCHEMA my_db.public TO ROLE analyst_role;
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE my_db TO ROLE analyst_role;
-- ロールのGRANT(階層構造の構築)
GRANT ROLE analyst_role TO ROLE analyst_admin;
GRANT ROLE analyst_admin TO ROLE SYSADMIN;-- 特定の権限を取り消し
REVOKE SELECT ON TABLE my_db.public.sales FROM ROLE analyst_role;
-- FUTURE GRANTsの取り消し
REVOKE SELECT ON FUTURE TABLES IN SCHEMA my_db.public FROM ROLE analyst_role;
-- ロールの階層関係を解除
REVOKE ROLE analyst_role FROM ROLE SYSADMIN;
-- CASCADE / RESTRICT(参照関係がある場合)
REVOKE SELECT ON TABLE my_db.public.sales FROM ROLE analyst_role CASCADE;| カテゴリ | 主な権限 | 対象オブジェクト |
|---|---|---|
| グローバル権限 | CREATE WAREHOUSE, MANAGE GRANTS, EXECUTE TASK | アカウント全体 |
| データベース権限 | USAGE, CREATE SCHEMA, MONITOR | データベース |
| スキーマ権限 | USAGE, CREATE TABLE, CREATE VIEW | スキーマ |
| テーブル権限 | SELECT, INSERT, UPDATE, DELETE, TRUNCATE | テーブル |
| ウェアハウス権限 | USAGE, OPERATE, MONITOR, MODIFY | ウェアハウス |
| 権限 | できること |
|---|---|
| USAGE | ウェアハウスを使用してクエリを実行 |
| OPERATE | ウェアハウスの起動・停止・中断・再開 |
| MONITOR | ウェアハウスの利用状況・パフォーマンスを監視 |
| MODIFY | ウェアハウスのプロパティ変更(サイズ変更等) |
Snowflakeはロールベースのアクセス制御(RBAC)に加え、任意アクセス制御(DAC)も採用しています。 DACでは、オブジェクトの所有者(作成したロール)がそのオブジェクトに対するすべての権限を持ちます。 所有権の移転はGRANT OWNERSHIP ON ... TO ROLE ...で実行します。
-- 所有権の移転
GRANT OWNERSHIP ON TABLE my_db.public.sales
TO ROLE etl_role
REVOKE CURRENT GRANTS;
-- REVOKE CURRENT GRANTS: 元の所有者の権限を取り消す
-- COPY CURRENT GRANTS: 元の所有者の権限を保持するRBAC
問題 1
新しく作成したカスタムロール custom_etl にウェアハウス etl_wh の操作権限を付与したい。ウェアハウスの起動・停止はできるが、プロパティ変更はできないようにするには、どの権限を付与すべきか?
正解: B
OPERATE権限はウェアハウスの起動(RESUME)・停止(SUSPEND)・中断(ABORT)を許可します。USAGEはクエリ実行に必要な権限ですが起動/停止は含みません。MODIFYはサイズ変更などのプロパティ変更を許可するため要件を超えます。MONITORは利用状況の監視のみで起動/停止はできません。
ACCOUNTADMINロールを日常的に使用しても問題ありませんか?
推奨されません。ACCOUNTADMINはアカウント内の全権限を持つ最上位ロールのため、誤操作やセキュリティインシデントのリスクが高まります。Snowflakeの公式ベストプラクティスでは、ACCOUNTADMINは管理作業が必要な場面でのみ切り替えて使用し、日常業務にはカスタムロールを使用することが推奨されています。また、ACCOUNTADMINには複数ユーザーを割り当て、MFAを有効にすべきです。
SYSADMINとSECURITYADMINの役割の違いは何ですか?
SYSADMINはウェアハウス・データベース・スキーマなどのオブジェクト管理を担当します。一方、SECURITYADMINはロール・ユーザーの作成およびGRANT権限の管理を担当します。SECURITYADMINにはMANAGE GRANTSグローバル権限があり、他のロールが所有するオブジェクトに対してもGRANT/REVOKEを実行できます。この分離により、オブジェクト管理とアクセス制御を独立して運用できます。
カスタムロールはどのシステム定義ロールの配下に作成すべきですか?
カスタムロールはSYSADMINの配下に作成することがベストプラクティスです。具体的には、GRANT ROLE custom_role TO ROLE SYSADMIN で階層をつなぎます。これにより、SYSADMINがカスタムロールの持つ権限を継承し、ACCOUNTADMIN経由でアカウント全体の権限を一元管理できます。カスタムロールをSYSADMIN配下に接続しないと「孤立ロール」となり、ACCOUNTADMINからも権限が見えなくなる問題が発生します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...