この記事は SnowPro Core認定試験(COF-C02) の合格記事です。
現在SnowPro Coreは(COF-C03)に移行中です。
はじめに
先日、SnowPro Core試験に2回目の挑戦で合格しました。
1回目の受験では残念ながら不合格だったのですが、結果を振り返る中で、自分の理解が曖昧だった部分や試験で問われるポイントが見えてきました。その後、重要だと感じたテーマを中心に再度学習し、3週間後に無事に合格することができました。
本記事では、その中でも特に重要だと感じたポイントをテーマごとに整理して紹介していきます。
今回は ロール(role) についてです。
ロール・アクセス制御(RBAC)とは
RBAC(Role-Based Access Control)とは、権限を「ロール」という単位にまとめ、そのロールをユーザーに割り当てることでアクセスを制御する仕組み です。
Snowflakeでは、ユーザーに直接権限を付与することはありません。必ず「権限をロールに付与し、そのロールをユーザーに付与する」という2段階のフローを取ります。
権限 → ロール(複数) → ユーザー
なぜこのような仕組みになっているかというと、ユーザーごとに個別の権限を管理すると、人数が増えるほど設定が煩雑になり、付与漏れや権限の付けすぎが起きやすくなるためです。権限をいったんロールにまとめておけば、「このユーザーにはこのロールを渡す」と決めるだけで済み、管理がシンプルかつ安全になります。
ロールは「役割ごとの権限のセット」と理解しておくとイメージしやすいです。さらにSnowflakeでは、ロールを別のロールに付与して 階層(ロール階層) を作ることができ、上位のロールは下位のロールの権限を継承します。この階層構造を理解しておくことが、システム定義ロールを攻略する第一歩になります。
覚えておくべきポイント
① システム定義ロールと責務
Snowflakeにはあらかじめ用意された システム定義ロール があります。それぞれ「何を管理するロールか」をセットで覚えるのが攻略の基本です。
| ロール | 主な責務 |
|---|---|
| ORGADMIN | 組織レベルの管理。アカウントの作成・管理を行う |
| ACCOUNTADMIN | アカウントの最上位ロール。最も強力で、付与は最小限にとどめる |
| SECURITYADMIN | ユーザー・ロール・権限の管理。MANAGE GRANTS 権限を持つ |
| USERADMIN | ユーザーとロールの作成・管理(CREATE USER / CREATE ROLE)専用 |
| SYSADMIN | ウェアハウス・データベースなどオブジェクトの作成・管理 |
| PUBLIC | 全ユーザー・ロールが自動的に保持。誰でも使える共通オブジェクト用 |
- ACCOUNTADMIN をユーザーのデフォルトロールに設定しない
-
ユーザー・ロールの作成は USERADMIN、権限(グラント)の管理は SECURITYADMIN(
MANAGE GRANTS) が担う - カスタムロールは SYSADMIN に集約 して、オブジェクト管理を一元化する
- ORGADMIN は組織管理専用。アカウント管理ロール(ACCOUNTADMIN)との役割の違いを混同しない
試験では「ユーザーやロールを作成できるのはどのロールか(→ USERADMIN)」「アカウント全体の権限を管理できるのはどのロールか(→ SECURITYADMIN)」といった、責務の切り分けが問われやすいです。
② ロール階層と継承
RBACで最も重要なのが、上位のロールが下位のロールの権限を継承する という関係です。システム定義ロールの既定の階層は次のようになっています。
ACCOUNTADMIN
/ \
SYSADMIN SECURITYADMIN
| |
(カスタムロール) USERADMIN
※ PUBLIC は全ユーザー・全ロールが自動保持
※ ORGADMIN はこの継承チェーンの外(独立)
ここで押さえておきたいポイントは次の通りです。
- ACCOUNTADMIN は SYSADMIN と SECURITYADMIN を継承するため、両方の権限を併せ持つ最上位ロール
- SECURITYADMIN は USERADMIN を継承する
- カスタムロール は SYSADMIN 配下にぶら下げるのが推奨。こうすると SYSADMIN が全オブジェクトを管理できる
-
ORGADMIN は継承チェーンの外 にいる独立したロール。組織管理が役割で、「他の管理ロールの上位」ではない点に注意。
私は最初、ORGADMIN を「ACCOUNTADMIN よりさらに偉いロール」と勘違いしていたのですが、役割がまったく別物だと理解してから整理がつきました。
③ 所有権(OWNERSHIP)と将来付与(Future Grants)
オブジェクトを作成すると、作成したロールがそのオブジェクトの OWNERSHIP(所有権) を持ちます。
- 1つのオブジェクトを所有できるロールは常に1つだけ
- 原則として、所有ロール(または上位ロール)だけがそのオブジェクトを変更・削除できる
- 所有権は別のロールへ移譲できる
また、GRANT ... ON FUTUREを使うと、今後そのスキーマ/データベース内に作成されるオブジェクト に対して自動的に権限を付与できます。これを Future Grants(将来付与) と呼びます。新しくテーブルを作るたびに権限を付け直す手間がなくなる仕組みで、運用面で重要です。
最後に
ロール・アクセス制御(RBAC)は、Snowflakeの権限管理を理解するための基本となる考え方です。SnowPro Coreでも頻繁に登場するため、しっかり押さえておきたいポイントの一つです。
私自身、最初はロール名や権限の種類を個別に覚えようとして混乱していましたが、まずは 「権限 → ロール → ユーザー」 の関係性を理解することで、全体像を掴みやすくなりました。また、ロール階層と権限継承の考え方を理解すると、権限管理の仕組みがより整理して理解できるようになりました。
本記事は私が試験対策の中で特に重要だと感じたポイントをまとめたものであり、SnowPro Coreの出題範囲を網羅しているわけではありません。実際の受験にあたっては、公式ドキュメントや公式学習コンテンツもあわせて確認しながら学習を進めることをおすすめします。
この記事がこれからSnowPro Coreを受験される方の参考になれば幸いです。試験勉強、頑張ってください!
参考リンク