In Silico

データ基盤

Snowflake ロールとは?権限をロールに与えて階層で渡す仕組み

2026/10/28 (更新: 2026/11/3) シリーズ「Snowflake 入門」 第8回 / 全13回

シリーズSnowflake 入門全13回
  1. 第1回Snowflakeとは?仕組み・料金・使い方をわかりやすく解説
  2. 第2回Snowflakeのウェアハウスとは?サイズとクレジット・自動停止
  3. 第3回Snowflakeの料金の仕組みとは?計算・保存・転送とコスト管理
  4. 第4回Snowflake マイクロパーティションとは?プルーニングとクラスタリング
  5. 第5回Snowflake VARIANTとは?JSONを扱う半構造化データの仕組み
  6. 第6回Snowflake Time Travel(タイムトラベル)とは?保持期間と復元
  7. 第7回Snowflake レプリケーションとは?別リージョンに複製して切り替える
  8. 第8回Snowflake ロールとは?権限をロールに与えて階層で渡す仕組み
  9. 第9回Snowflake Dynamic Tablesとは?SELECTだけで結果の表を最新に保つ
  10. 第10回Snowflake データ共有とは?コピーせずに取引先と同じ表を使う
  11. 第11回Snowflake Icebergテーブルとは?同じデータを他のエンジンでも読む
  12. 第12回Snowflake Cortexとは?データを外に出さずにSQLでAIを使う
  13. 第13回Snowflake Well-Architectedとは?5つの柱で自分の判断を見直す

このシリーズの紹介へシリーズ一覧へ

  • ロール
  • Snowflake
  • 権限
  • カスタムロール
  • ACCOUNTADMIN
  • SYSADMIN
  • SECURITYADMIN
  • ロール階層
  • RBAC
  • セカンダリロール
  • データベースロール
  • 多要素認証
  • SHOW GRANTS
  • USAGE
  • 将来の付与
  • ネットワークポリシー
  • サービスユーザー
  • 最小権限
  • 組織アカウント
  • データ基盤
目次
背景・問い・要点
背景

データベースでは、誰がどのデータを読み、何を変えてよいかを決める必要がある。決め方の一つは、権限を人ごとに与えることである。人が増え、仕事が変わるたびに、一人ひとりの権限を直すことになる。

Snowflake では、権限をロールに与え、ロールをユーザーに与える。この方式を RBAC(Role-based Access Control、ロールベースのアクセス制御)という1。ロールは、権限をまとめて持つ Snowflake のオブジェクトである。

問い

Snowflake のロールとは何で、権限はどうやってユーザーに届くのか。

要点

ロールは、権限をまとめて持つ Snowflake のオブジェクトである。管理者が権限をロールに与え、そのロールをユーザーや別のロールに与えるので、ユーザーは自分のロールと、そのロールに与えられた別のロールの権限を使える。

表を読むロールには、表の SELECT だけでなく、ウェアハウス、データベース、スキーマの USAGE が要る。Snowflake は、仕事に合わせたカスタムロールを作って SYSADMIN の下につなぎ、ACCOUNTADMIN は少数の人に限るよう勧めている。パスワードでサインインする人には、多要素認証(MFA、Multi-Factor Authentication)が段階的に必須になっている。

モデル・例示

表を一つ読めるロールを作り、ユーザーに与える

表を一つ読ませるだけでも、ロールには表の SELECT のほかにウェアハウス、データベース、スキーマの USAGE を与え、そのロールをユーザーに渡す必要がある。ユーザー smith に表 d1.s1.t1 を読ませたいとして、Snowflake のアクセス制御の設定手順に出てくるカスタムロール r1 で考える2。ロールを作るのは USERADMIN 以上のロールで、権限やロールを与えるのは SECURITYADMIN などのロールで行う2。

まず、ロールを作り、表を読むのに要る四つの権限を与える2。

CREATE ROLE r1;

GRANT USAGE ON WAREHOUSE w1 TO ROLE r1;     -- 計算に使うウェアハウス
GRANT USAGE ON DATABASE d1 TO ROLE r1;      -- 表の入ったデータベース
GRANT USAGE ON SCHEMA d1.s1 TO ROLE r1;     -- 表の入ったスキーマ
GRANT SELECT ON TABLE d1.s1.t1 TO ROLE r1;  -- 表そのもの

USAGE は、そのオブジェクトを使う権限で、SELECT は表を読む権限である。表を問い合わせるには、問い合わせを動かすウェアハウスの USAGE が要る2。表の SELECT のほかに、表を入れているデータベースとスキーマにも USAGE などの権限が要る3。

次に、ロールをユーザー smith に与え、サインインしたときに使うロール(既定のロール)にする。さらに、ロールを SYSADMIN に与えて、ロールの階層につなぐ2。

GRANT ROLE r1 TO USER smith;
ALTER USER smith SET DEFAULT_ROLE = r1;
GRANT ROLE r1 TO ROLE sysadmin;

ロールが持つ権限を見る: SHOW GRANTS TO ROLE で、ロールに与えた権限を一覧できる。同じ r1 について、Snowflake のアクセス制御のベストプラクティスのページが載せている結果を、列を絞って示す3。

SHOW GRANTS TO ROLE r1;
| privilege | granted_on | name     | granted_to | grantee_name | granted_by    |
|-----------+------------+----------+------------+--------------+---------------|
| USAGE     | DATABASE   | D1       | ROLE       | R1           | SECURITYADMIN |
| USAGE     | SCHEMA     | D1.S1    | ROLE       | R1           | SECURITYADMIN |
| SELECT    | TABLE      | D1.S1.T1 | ROLE       | R1           | SECURITYADMIN |
| USAGE     | WAREHOUSE  | W1       | ROLE       | R1           | SECURITYADMIN |

与えた四つの権限が、一行ずつ並ぶ。名前は大文字で返る。権限を与えたのは SECURITYADMIN のロールである。r1 に与えたのは、表 t1 を問い合わせるのに要る権限だけで、表のデータを変える権限は与えていない。

r1 を SYSADMIN に与えたので、SYSADMIN を持つ管理者も、r1 の権限を使える1。

権限の考え方:オブジェクト、権限、ロール、ユーザー

Snowflake のアクセス制御は、四つの概念でできている1。

オブジェクトは、コンテナの階層に入っている。いちばん上が組織で、その下にアカウント、データベース、スキーマが続き、表やビューはスキーマの中にある1。

Snowflake のアクセス制御は、三つの方式を組み合わせている1。

Snowflake は、本番の環境では RBAC を勧めている。UBAC は、個人の開発や共同作業のような場面のためのものとしている3。

オブジェクトは、一つのロールが所有する。所有するのは、ふつうはそのオブジェクトを作ったときのロールである1。Snowflake には、権限の確認を省略できる「スーパーユーザー」のようなものはない1。

システムロール:Snowflake が最初から決めているロール

Snowflake には、最初から決まっているロールがある1。

ロール役割
GLOBALORGADMIN組織の単位の仕事(アカウントの管理など)。組織アカウントにだけある
ACCOUNTADMINSYSADMIN と SECURITYADMIN を含む、いちばん上のロール
SECURITYADMIN権限の付与を管理し、ユーザーとロールを作る。USERADMIN を含む
USERADMINユーザーとロールの管理だけを行う
SYSADMINウェアハウスやデータベースなどのオブジェクトを作る
PUBLICすべてのユーザーとロールに自動で与えられる疑似ロール

以前の組織のロール ORGADMIN は、今後なくなる予定で、Snowflake は GLOBALORGADMIN を使うよう勧めている1。システムロールは消せず、Snowflake が与えた権限も取り消せない1。システムロールは、アカウントを管理する権限を持って作られている。Snowflake は、その権限とオブジェクトごとの権限を同じロールに混ぜないのがよいとし、権限を足すなら、システムロールではなくカスタムロールに与えて、そのロールをシステムロールに与えるよう勧めている1。

ACCOUNTADMIN の扱い: ACCOUNTADMIN は、アカウントの管理に使う、システムのいちばん上のロールである1。最も強いロールだが、スーパーユーザーではない。オブジェクトを見たり管理したりできるのは、ACCOUNTADMIN か、その下のロールが権限を持つときだけである3。Snowflake は、次の三つを強く勧めている3。

さらに、次のことも勧めている32。

カスタムロール:仕事に合わせて作り、SYSADMIN の下につなぐ

自分で作るロールを、カスタムロールという。作れるのは USERADMIN 以上のロールか、CREATE ROLE の権限を持つロールである2。作ったばかりのロールは、どのユーザーにもロールにも与えられていない1。

Snowflake は、最小権限の原則に従い、組織の仕事に合わせたカスタムロールを作って、少ないオブジェクトだけを操作できるようにするよう勧めている2。カスタムロールは、いちばん上を SYSADMIN に与えて、階層につなぐ1。SYSADMIN につながっていないロールが所有するオブジェクトは、システムの管理者が管理できない1。ACCOUNTADMIN でさえ、カスタムロールが作ったオブジェクトを、既定では変えたり消したりできない3。

ロール階層: ロールを別のロールに与えると、ロール階層ができる。下のロールの権限は、上のロールが受け継ぐ1。ロールを所有するロールは、所有しているだけでは、そのロールの権限を受け継がない。受け継ぎは、ロールを与えてできた階層の中でだけ起きる1。

アクセスロールと機能ロール: Snowflake は、二種類のロールを組み合わせる形を勧めている3。

アクセスロールを機能ロールに与え、機能ロールをユーザーに与える。二つに技術的な違いはなく、違うのは使い方だけである3。

ロールの種類: Snowflake のロールには、アカウントのどのオブジェクトにも使えるアカウントロールのほかに、データベースロール、クラスのインスタンスに使うインスタンスロール、Snowflake Native App に使うアプリケーションロールなどがある1。セッションで有効にできるのはアカウントロールだけで、データベースロールとインスタンスロールは、アカウントロールに与えて使う1。

データベースロール: 一つのデータベースの中だけで使うロールを、データベースロールという。そのデータベースのオブジェクトの権限だけを持てる3。データを共有するときには、共有するデータベースにデータベースロールを入れておくと、受け取った側がそれを自分のロールに与えられる3。

プライマリロールとセカンダリロール

セッションで使っているロールを、プライマリロールという。プライマリロールは一度に一つだが、そのほかに、いくつでもセカンダリロールを有効にできる1。

ユーザーのセカンダリロールの既定は、今は「与えられたすべてのロール」(ALL)である。サインインすると、与えられたロールがすべてセカンダリロールとして有効になる。以前の既定は NULL で、セカンダリロールは有効にならなかった。2025 年 1〜2 月のリリースで既定が ALL に変わり、3 月のリリースからすべてのアカウントで ALL になった45。ただし、ALL に変わったのは、この設定を決めていない(または NULL にした)ユーザーだけである。ユーザーごとに値を決めていれば、その値は変わらない。値を () にしたユーザーには、セカンダリロールが無い4。

ロールを通さずにユーザーへ直接与えた権限は、今は、すべてのセカンダリロールが有効なときだけ効く2。2026 年 10 月のリリースで入った変更では、セカンダリロールの設定にかかわらず効くようになる。この変更は今は既定で無効で、管理者が試しに有効にできる6。

権限を与える:GRANT、将来の付与、管理アクセススキーマ

権限は GRANT で与える。スキーマの表をまとめて指定する ALL TABLES IN SCHEMA は、その時点である表にだけ効き、後で作る表には効かない2。

MANAGE GRANTS の権限を最初から持つのは、SECURITYADMIN と ACCOUNTADMIN である7。権限が足りずに SQL が失敗したときは、関数 EXPLAIN_PRIVILEGES で、足りない権限を調べられる。オブジェクトの権限を持たない人に調べさせるには、RESOLVE ALL ON ACCOUNT の権限を与える8。

サインインを守る:多要素認証とサービスユーザー

2024 年には、Snowflake の利用企業のアカウントからデータが盗まれた。調査した Mandiant は、Snowflake 社自身の社内環境が破られた証拠は見つからず、盗まれた利用者の認証情報が使われたと報告した。同じ報告は、侵入が多く成功した主な要因として三つを挙げた。被害を受けたアカウントは多要素認証を有効にしていなかった。盗まれた認証情報は替えられないまま使える状態で、中には盗まれてから何年もたつものもあった。信頼できる場所からだけつなげるネットワークの許可リストも無かった9。

Snowflake は、パスワードを使う人のユーザーには多要素認証を必須にし、サービスのユーザーにはパスワードを使わせない変更を、段階的に進めている10。多要素認証は、パスワードに加えて、一度だけ使えるコードを出す認証アプリやパスキーなどの二つ目の要素で本人を確かめる方式である11。2026 年 10 月時点のドキュメントの予定は、次のとおりである。日付は見込みで、第 1・第 2 段階の期間はすでに過ぎ、第 3 段階の期間も 2026 年 10 月で終わる。第 1 段階は動作変更バンドルに合わせて進み、第 2・第 3 段階はアカウントごとに順に適用され、適用の日が知らされる10。

時期(見込み)変わること
2025 年 9 月〜2026 年 1 月Snowsight にパスワードでサインインする人に、多要素認証が必須になる
2026 年 5 月〜7 月新しく作る人のユーザーは、パスワードでサインインするとき、どこからでも多要素認証が必須。新しいサービスのユーザーは SERVICE の種類だけ
2026 年 8 月〜10 月パスワードでサインインするすべての人のユーザーに、例外なく多要素認証が必須。LEGACY_SERVICE は SERVICE に移され、パスワードが使えなくなる

2024 年 12 月の Snowflake のブログは、2025 年 11 月までにパスワードだけのサインインを止めるとしていた12。今の予定では、最後の段階は 2026 年 8 月〜10 月である10。

ユーザーの種類: ユーザーの TYPE で、人かサービスかを決める13。

ほかに SERVICE_AGENT などの種類もある13。

サービスのユーザーには、キーペア認証や OAuth を使う1516。プログラム用のアクセストークンも使えるが、サービスのユーザーで使うには、ネットワークポリシーをかけておく必要がある17。

ネットワークポリシー: 既定では、Snowflake にはどこからでもつなげる18。ネットワークポリシーで、つないでよい IP アドレスを決められる。新しく作るポリシーは、ネットワークルールを使う18。Snowflake の Well-Architected Framework は、信頼できる IP アドレスだけを許すネットワークポリシーを決めておくよう勧めている。盗まれた認証情報が、知らない場所から使われるのを防げる15。

アカウントとデータベースの分け方

一つの会社のアカウントは、組織でまとめられる。組織の管理者は、リージョンやクラウドの違うアカウントをまとめて作り、管理できる19。組織の単位の仕事をする組織アカウントは、Enterprise Edition 以上で使える20。

開発と本番のような環境をアカウントで分けると、ロールもアカウントごとに別になる。アカウントごとに、ユーザー、ロール、データベース、ウェアハウスを別に持つからである21。一つのアカウントで分けるなら、同じアカウントのロールと権限で、環境ごとのアクセスを分けて管理することになる22。どちらにするかについて、Snowflake のドキュメントは次のように書いている。

出典23件
  1. Snowflake「Overview of Access Control | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-access-control-overview — 日本語版の題は「アクセス制御の概要」。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24

  2. Snowflake「Configuring access control | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-access-control-configure — カスタムロールの例。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11

  3. Snowflake「Access control best practices | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-access-control-considerations — ACCOUNTADMIN の扱い、アクセスロールと機能ロール、SHOW GRANTS の例。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12

  4. Snowflake「Default value of DEFAULT_SECONDARY_ROLES object property on users changed to (‘ALL’) | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/release-notes/bcr-bundles/2024_08/bcr-1692 ↩ ↩2

  5. Snowflake「2024_08 Bundle | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/release-notes/bcr-bundles/2024_08_bundle — 9.7 のリリース(2025 年 3 月 17〜27 日)で一般に有効。 ↩

  6. Snowflake「User grants: Privileges granted to a user apply regardless of secondary roles (Disabled by default) | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/release-notes/bcr-bundles/2026_08/bcr-2438 ↩

  7. Snowflake「GRANT <privileges> … TO ROLE | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/sql-reference/sql/grant-privilege ↩

  8. Snowflake「Troubleshooting access control issues | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-access-control-troubleshooting ↩

  9. Mandiant「UNC5537 Targets Snowflake Customer Instances for Data Theft and Extortion | Google Cloud Blog」2024年6月11日、2026年10月28日取得. https://cloud.google.com/blog/topics/threat-intelligence/unc5537-snowflake-data-theft-extortion ↩

  10. Snowflake「Planning for the deprecation of single-factor password sign-ins | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-mfa-rollout — 日付は見込み。試用のアカウントなどは対象外。 ↩ ↩2 ↩3 ↩4

  11. Snowflake「Multi-factor authentication (MFA) | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/security-mfa ↩

  12. Brad Jones「Snowflake Will Block Single-Factor Password Authentication by November 2025」Snowflake Blog、2024年12月1日、2026年10月28日取得(アーカイブ). https://web.archive.org/web/20241202210136/https://www.snowflake.com/en/blog/blocking-single-factor-password-authentification/ ↩

  13. Snowflake「User management | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/admin-user-management ↩ ↩2 ↩3 ↩4

  14. Snowflake「CREATE USER | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/sql-reference/sql/create-user ↩

  15. Snowflake「Security & Governance Pillar」Snowflake Well-Architected Framework、2026年6月17日更新、2026年10月28日取得. https://www.snowflake.com/en/developers/guides/well-architected-framework-security-and-governance/ — 最小権限、多要素認証、ネットワークポリシー。 ↩ ↩2

  16. Snowflake「Key-pair authentication and key-pair rotation | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/key-pair-auth ↩

  17. Snowflake「Using programmatic access tokens for authentication | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/programmatic-access-tokens ↩

  18. Snowflake「Controlling network traffic with network policies | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/network-policies ↩ ↩2

  19. Snowflake「Introduction to organizations | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/organizations ↩

  20. Snowflake「Organization accounts | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/organization-accounts ↩

  21. Snowflake「Creating an account | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/organizations-manage-accounts-create ↩

  22. Snowflake「Architectural recommendations for DCM Projects | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/dcm-projects/dcm-projects-enterprise — 一つのアカウントでも扱えるとする。 ↩ ↩2 ↩3

  23. Snowflake「DevOps with Snowflake | Snowflake Documentation」日付なし、2026年10月29日取得. https://docs.snowflake.com/en/developer-guide/builders/devops-with-snowflake ↩

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。