はじめに:なぜカスタムロールが必要なの?
Snowflakeを使い始めると、最初はACCOUNTADMINやSYSADMINといったシステム定義ロールで何でもできてしまうので便利です。でも、実務でチーム運用するときに「分析者にはSELECTだけ許したい」「ETL担当にはこのDBへのINSERTだけ任せたい」といった役割ごとのきめ細かい権限が必要になります。そこで登場するのがカスタムロールです。
RBAC(ロールベースアクセス制御)の基本については Snowflake RBAC入門|ロールで権限管理を始めよう でも触れていますが、本記事ではその一歩先、「自分でロールを作って、GRANT/REVOKEで権限を出し入れする」具体的な手順をフレンドリーに解説します。

基本概念のおさらい
ロールと権限の関係
Snowflakeでは、ユーザーに直接権限を付与しないのが基本です。代わりに「ロール」というハコに権限を集めて、ユーザーにそのロールを付与します。これにより、人事異動があってもロールの付け替えだけで済みます。
GRANTとREVOKEとは?
GRANTは「権限を与える」、REVOKEは「権限を剥がす」コマンドです。シンプルですが、対象オブジェクト(データベース、スキーマ、テーブル、ウェアハウスなど)ごとに必要な権限の種類が異なる点に注意しましょう。
カスタムロールを作って権限を付与してみよう
ステップ1: ロールを作成する
ロールの作成・管理は通常 USERADMIN または SECURITYADMIN ロールで行います。
USE ROLE USERADMIN;
-- 分析者向けカスタムロールを作成
CREATE ROLE ANALYST_ROLE
COMMENT = '読み取り専用の分析者用ロール';
ステップ2: 権限をGRANTする
クエリを動かすには「ウェアハウスのUSAGE」「DBとスキーマのUSAGE」「テーブルのSELECT」が最低限必要です。階層的にGRANTしていくのがコツ!
USE ROLE SECURITYADMIN;
-- ウェアハウスを使う権限
GRANT USAGE ON WAREHOUSE ANALYTICS_WH TO ROLE ANALYST_ROLE;
-- データベースとスキーマを参照する権限
GRANT USAGE ON DATABASE SALES_DB TO ROLE ANALYST_ROLE;
GRANT USAGE ON SCHEMA SALES_DB.PUBLIC TO ROLE ANALYST_ROLE;
-- 既存テーブルすべてにSELECT、今後作られるものにも適用
GRANT SELECT ON ALL TABLES IN SCHEMA SALES_DB.PUBLIC TO ROLE ANALYST_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SALES_DB.PUBLIC TO ROLE ANALYST_ROLE;
FUTURE を使うと、将来作成されるオブジェクトにも自動で権限が付与されるので、付与漏れを防げます。
ステップ3: ユーザーにロールを割り当てる
GRANT ROLE ANALYST_ROLE TO USER TARO_YAMADA;
-- 親ロール(SYSADMIN)にもぶら下げて階層管理
GRANT ROLE ANALYST_ROLE TO ROLE SYSADMIN;

権限を剥がす(REVOKE)とロール削除
権限が不要になったらREVOKEでサクッと取り上げます。構文はGRANTとほぼ対称です。
-- テーブルのSELECT権限だけ剥奪
REVOKE SELECT ON ALL TABLES IN SCHEMA SALES_DB.PUBLIC FROM ROLE ANALYST_ROLE;
-- ユーザーからロールを外す
REVOKE ROLE ANALYST_ROLE FROM USER TARO_YAMADA;
-- ロール自体を削除(付与済み権限も一緒に外れる)
DROP ROLE ANALYST_ROLE;
付与状況の確認には SHOW GRANTS TO ROLE ANALYST_ROLE; や SHOW GRANTS ON TABLE ...; が便利です。
実務で意識したいポイント
- 最小権限の原則:必要な権限だけを与える。READ専用とWRITE可能は分ける。
- カスタムロールはSYSADMINにGRANT:親ロール経由で管理を一元化できます。
- USAGEを忘れない:テーブルにSELECTだけ与えても、上位のDB/スキーマにUSAGEがないとアクセスできません。
- ウェアハウス権限も別物:計算リソースの利用はUSAGE/OPERATEで制御します。ウェアハウスの基本も合わせて確認しましょう。
まとめ
カスタムロールは、Snowflakeを安全に・スケーラブルに運用するうえで欠かせない仕組みです。CREATE ROLE → GRANT でロールに権限を集め、GRANT ROLE ... TO USER でユーザーに割り当てる、という流れさえ押さえれば怖くありません。まずは「読み取り専用ロール」から作って、チームの権限設計をスッキリさせてみてください!
参考リンク
関連記事
- Snowflake RBAC入門|ロールで権限管理を始めよう – 本記事の前提となるRBACの全体像をやさしく解説。
- Snowflakeウェアハウスとは?サイズと使い分けを初心者向けに解説 – ロールに付与するUSAGE権限の対象であるウェアハウスの基本。
- Snowflakeの料金体系をやさしく解説 – 権限設計と並行して押さえたいクレジット消費の仕組み。

