■ はじめに
https://dk521123.hatenablog.com/entry/2021/11/02/130111
https://dk521123.hatenablog.com/entry/2021/11/22/212520
https://dk521123.hatenablog.com/entry/2021/11/15/221245
の続き。 今回は、Snowflake の ロールや権限などのアクセス制御 について、メモっておく。
目次
【1】アクセス制御の種類 1)DAC(Discretionary Access Control) 2)RBAC(Role-Based Access Control) 【2】アクセス制御を理解するための重要な概念 【3】セキュリティ保護可能なオブジェクト 【4】ロール - role 【5】システム定義のロール 1)GLOBALORGADMIN - 組織アカウントの組織管理者 2)ORGADMIN - 通常アカウントの組織管理者 3)ACCOUNTADMIN - アカウント管理者 4)SYSADMIN - システム管理者 5)PUBLIC 6)SECURITYADMIN - セキュリティ管理者 7)USERADMIN - ユーザー管理者 【6】ユーザー - user 【7】権限 - grant
【1】アクセス制御の種類
https://docs.snowflake.com/ja/user-guide/security-access-control-overview.html
アクセス制御に対するSnowflakeのアプローチは、 次の両方のモデルの側面を組み合わせたものです。 => 詳細は、以下の関連記事を参照の事
Snowflake 〜 アクセス制御種類 〜
https://dk521123.hatenablog.com/entry/2025/05/13/162636
1)DAC(Discretionary Access Control)
* 任意アクセス制御 * 各オブジェクトに所有者がおり、 所有者はそのオブジェクトへのアクセスを許可できます。
2)RBAC(Role-Based Access Control)
* ロールベースアクセス制御 * 個々のユーザごとではなく、 ユーザに割り当てられたロール(role:役割)ごとに 権限を付与する方式
【2】アクセス制御を理解するための重要な概念
1)オブジェクト - object 2)権限 - grant 3)ロール - role 4)ユーザ - user
1)関連図
+-------------------+ | object <=> grant | <=> Role => User +-------------------+ | ^ | Ownership | | +-----------------------+
補足
* ユーザは何も所有しない
【3】オブジェクト
* Werehouse * Database + Schema + Table + View + etc... * Role * User => ほぼすべてが、セキュリティ保護可能なオブジェクト
1)関連図
+ 組織 -------------------------------+ | +アカウント-----------------------+ | | | +データベース-----------------+ | | | | | +スキーマ-----------------+ | | | | | | | +スキーマオブジェクト--+ | | | | | | | | | テーブルなど | | | | | | | | | +---------------------+ | | | | | | | +-------------------------+ | | | | | +-----------------------------+ | | | | ユーザとロール | | | | 仮想ウェアハウス | | | | リソースモニター | | | | 統合など | | | +---------------------------------+ | +-------------------------------------+
【4】ロール - role
https://docs.snowflake.com/ja/user-guide/security-access-control-configure.html
Snowflake のロールの特徴
* ロールを別のロールに付与すると、ロール間に「親子」関係ができる => 「ロール階層」とも呼ばれている => ロールを「継承」する形になる
1) サンプル
https://docs.snowflake.com/ja/sql-reference/sql/create-role.html
-- ロール「demo_role」を作成(存在してたら作らない) CREATE ROLE IF NOT EXISTS demo_role;
https://docs.snowflake.com/ja/sql-reference/sql/show-roles.html
-- 確認 SHOW ROLES LIKE 'demo_role';
【5】システム定義のロール
https://docs.snowflake.com/ja/user-guide/security-access-control-overview#system-defined-roles
https://docs.snowflake.com/ja/user-guide/security-access-control-considerations.html
https://docs.snowflake.com/ja/user-guide/security-access-control-configure.html
https://docs.snowflake.com/ja/user-guide/security-access-control-overview.html
1)GLOBALORGADMIN - 組織アカウントの組織管理者
* 組織レベルで複数アカウント組織の運営を管理するロール
2)ORGADMIN - 通常アカウントの組織管理者
* 組織レベルで運用を管理するロール
3)ACCOUNTADMIN - アカウント管理者
* SYSADMIN および SECURITYADMIN システム定義のロールをカプセル化した システムの最上位のロール * 他の管理者ロールは、このロールの子
具体的な範囲
* アカウント内にあるすべてのオブジェクトの表示と操作 * Snowflakeの請求 * クレジットデータの表示と管理 * 実行中の SQL ステートメントの停止
4)SYSADMIN - システム管理者
* データベース、スキーマ、ウェアハウスを作成・管理。 以下を作成する権限が含まれている * ウェアハウス * データベース * すべてのデータベースオブジェクト(スキーマ、テーブルなど)
5)PUBLIC
* アカウント内のすべてのユーザーおよびすべてのロールに 自動的に付与される疑似ロール
6)SECURITYADMIN - セキュリティ管理者
* 権限付与の管理 以下の権限が付与されている * アカウント内のオブジェクトに対する権限 * 取り消すためのグローバルMANAGE GRANTS権限 << ★超強力な権限
7)USERADMIN - ユーザー管理者
* ユーザとロールの作成・管理
SECURITYADMIN(セキュリティ管理者)との使い分け
* SECURITYADMIN(セキュリティ管理者)でも 「ユーザとロールの作成・管理」は可能だが、USERADMINで作業する方がいい => 極力USERADMINで行い、できないものをSECURITYADMINで行う
【6】ユーザー - user
* snowflake を使用するユーザーを定義する
1)サンプル
https://docs.snowflake.com/ja/sql-reference/sql/create-user.html
-- システム内の指定したユーザーがいなければ、新しいユーザーを作成する CREATE USER IF NOT EXISTS demo_user LOGIN_NAME = "demo_user" DEFAULT_ROLE = "demo_role" MUST_CHANGE_PASSWORD = TRUE ;
https://docs.snowflake.com/ja/sql-reference/sql/show-users.html
-- システム内のユーザーをリストを表示 SHOW USER LIKE 'demo_user';
例1:ユーザー作成の一連の流れ
-- ユーザ用のロール作成 CREATE ROLE IF NOT EXISTS "demo_role_for_user"; -- ユーザー作成 CREATE USER IF NOT EXISTS demo_user LOGIN_NAME = "demo_user" DEFAULT_ROLE = "demo_role_for_user" PASSWORD = "password" MUST_CHANGE_PASSWORD = TRUE ; -- 作成したロールとユーザーを紐づける形でGRANTする GRANT ROLE demo_role TO USER demo_user; -- 後は、必要なものをGRANTしていく GRANT USAGE ON WAREHOUSE demo_warehouse TO ROLE demo_role;
例2:読み取り専用ロール・ユーザ作成
* 以下の関連記事を参照のこと。
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
【7】権限 - grant
https://docs.snowflake.com/ja/sql-reference/sql/grant-privilege.html
* ユーザーやロールへの権限を付与 * cf. GRANT = 承諾する, 授ける, 許可する * 「GRANT <権限> ... TO ROLE」の形
1)サンプル
例1:GRANT ROLE TO USER
https://docs.snowflake.com/ja/sql-reference/sql/grant-role.html
-- ユーザーまたは別のロールにロールを割り当てます -- ユーザーにロールを付与すると、ユーザーはロールに許可された -- すべての操作を(ロールに付与されたアクセス権を介して)実行できます GRANT ROLE demo_role TO USER demo_user;
例2:GRANT USAGE TO ROLE
-- WAREHOUSE の使用許可を付与する -- (USE <オブジェクト> コマンドを実行する権限) GRANT USAGE ON WAREHOUSE demo_warehouse TO ROLE demo_role ;
例3:GRANT OWNERSHIP TO ROLE
GRANT OWNERSHIP ON USER demo_user TO ROLE demo_owner_role; GRANT OWNERSHIP ON ROLE demo_role TO ROLE demo_owner_role; -- GRANT OWNERSHIP については、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2022/02/25/094250
例4:GRANT MONITOR, MODIFY TO ROLE
https://docs.snowflake.com/ja/user-guide/security-access-control-privileges.html#resource-monitor-privileges
-- デモ用のリソースモニターを作成 CREATE RESOURCE MONITOR demo_resource_monitor WITH REDIT_QUOTA = 8 FREQUENCY = DAILY START_TIMESTAMP = IMMEDIATELY TRIGGERS ON 50 percent do notify ON 75 percent do notify ON 99 percent do notify ; -- 権限付与 -- MONITOR : リソースモニターを表示できるようにします -- MODIFY : リソースモニターのプロパティを変更できるようにします GRANT MONITOR, MODIFY ON RESOURCE MONITOR demo_resource_monitor TO ROLE demo_role ;
例5:GRANT ALL TO ROLE
GRANT ALL ON DATABASE demo_database TO ROLE demo_role;
例6:ON FUTURE
https://docs.snowflake.com/ja/sql-reference/sql/grant-privilege.html
GRANT ALL -- ON FUTUREによって将来的な許可も可能 ON FUTURE VIEWS IN SCHEMA demo_detabase.demo_schema TO ROLE demo_role ; -- Read Only なユーザにはSELECTしかさせないみたいな管理ができる GRANT ALL ON FUTURE TABLES IN SCHEMA demo_detabase.demo_schema TO ROLE demo_readonly_role ;
参考文献
https://dev.classmethod.jp/articles/create-snowflake-objects-by-snowsql-matome/
https://dev.classmethod.jp/articles/how-to-check-the-pliviledges-granted-to-a-role/
https://datumstudio.jp/blog/1029_snowflake3/
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / ゼロコピークローン ~
https://dk521123.hatenablog.com/entry/2021/11/27/134934
Snowflake 〜 アクセス制御種類 〜
https://dk521123.hatenablog.com/entry/2025/05/13/162636
Snowflake ~ ユーザ/ロールあれこれ ~
https://dk521123.hatenablog.com/entry/2022/11/02/144541
Snowflake ~ GRANT OWNERSHIP ~
https://dk521123.hatenablog.com/entry/2022/02/25/094250
Snowflake ~ Data Sharing ~
https://dk521123.hatenablog.com/entry/2024/02/19/152927
Snowflake ~ IDENTIFIER ~
https://dk521123.hatenablog.com/entry/2024/02/20/095207
Snowflake 〜 SET / 変数定義 〜
https://dk521123.hatenablog.com/entry/2025/06/05/183947
権限トラブル時のTips
https://dk521123.hatenablog.com/entry/2022/08/19/131922
エラー「Insufficient privileges to operate」時の対応
https://dk521123.hatenablog.com/entry/2022/08/02/090439
エラー「Table does not exist or not authorized」時の対応
https://dk521123.hatenablog.com/entry/2022/08/18/120935
SELinux
https://dk521123.hatenablog.com/entry/2017/12/10/222000