Snowflakeのロールを用いたアクセス制御・権限設定の方法とは?(vol.3)
- 公開日:2022年12月05日(月)

Snowflakeでは、テーブルやスキーマといったデータへのアクセスに関するセキュリティ保護の方法として、オブジェクトごとにアクセス制御を行う方法と、ロールでアクセス制御を行う方法があります。
本ブログでは、Snowflakeのロールを用いたアクセス制御方法について、アクセス制御が可能な対象やロールの割り当て方、権限の種類や付与/削除の方法などを解説します。
目次
Snowflakeのアクセス制御方法やロール・権限とは?
Snowflakeのアクセス制御方法には、任意アクセス制御(DAC)とロールベースのアクセス制御(RBAC)の2つがあります。
- 任意アクセス制御(DAC):各オブジェクトに所有者がおり、所有者はそのオブジェクトへのアクセスを許可できます。
- ロールベースのアクセス制御(RBAC):アクセス権限がロールに割り当てられ、ロールはユーザーに割り当てられます。
*参照元:アクセス制御フレームワーク
ここで、Snowflakeのアクセス制御を理解するために重要な4つのポイントを解説します。
- ユーザー:
Snowflakeによって認識される(個人またはプログラムに関連付けられている)ユーザーID。 - ロール:
権限を付与できるエンティティ。
ロールがユーザーに割り当てられます。
ロールを他のロールに割り当て、ロール階層を作成することもできます。 - 権限:
(セキュリティ保護可能な)オブジェクトへの定義されたレベルのアクセス。
複数の個別の権限を使用して、付与されるアクセスの粒度を制御できます。 - (セキュリティ保護可能な)オブジェクト:
アクセスを付与できるエンティティ。
付与によって許可されない限り、アクセスは拒否されます。
Snowflakeでは、セキュリティ保護可能なオブジェクト(Table/View/Schemaなど)へのアクセスは、ロールに割り当てられた権限を介して許可され、その権限は他のロールまたはユーザーに割り当てられます。さらに、各セキュリティ保護可能なオブジェクトには、他のロールへのアクセスを付与できる所有者がいます。
ロールにアクセス制御の権限を割り当て、Snowflakeの各ユーザーにロールを割り当てる仕組みによって、アクセス制御を柔軟に設定することがSnowflakeでは可能になります。
Snowflakeでアクセス制御が可能なオブジェクトとは?
Snowflakeでは、データの保存先であるTableやTableを参照するView、プログラムのStored ProcedureなどはSchema(スキーマ)配下にあり、さらに、Schema(スキーマ)はDatabaseの配下にあります。
ロールは、Database(データベース) or Schema(スキーマ)のどちらのアクセス制御も可能であり、TableやViewなどのSchema配下のオブジェクトレベルでのアクセス制御も可能です。また、ウェアハウスに対してもアクセス制御も可能です。
Snowflakeのロールの特徴や付与方法とは?
Snowflakeのロールには、次の特徴があります。
- セキュリティ保護可能なオブジェクトに対する権限の付与や取り消しができるエンティティです
- ロールはユーザーに割り当てられ、ユーザーが必要なアクション(SELECTやINSERTなど)を実行できるようにします
- ユーザーには複数のロールを割り当てることができます
※Snowflakeアカウントには、アカウント管理用の「ACCOUNTADMIN」のようなシステム定義のロールがあります。システム定義のロールはドロップできません。また、Snowflakeによってこれらのロールに付与された権限は、取り消すことができません。
Snowflakeでは、
①Snowflakeへ接続 → ②AdminタブにあるUser&Role画面に遷移 → ③Rolesタブから追加
などによって、ユーザーにロールを割り当てることができます。
Snowflakeのロールを用いた権限の設定方法とは?
本章では、テーブルに対する権限の種類や権限の付与/削除の方法を解説します。
テーブルに対する権限の種類
テーブルに対する権限には次のものがあります。
- SELECT:テーブルで「SELECT」ステートメントを実行できるようにします
- INSERT:テーブルで「INSERT」コマンドを実行できるようにします
- UPDATE:テーブルで「UPDATE」コマンドを実行できるようにします
- TRUNCATE:テーブルで「TRUNCATE TABLE」コマンドを実行できるようにします
- DELETE:テーブルで「DELETE」コマンドを実行できるようにします
- REFERENCES:テーブルを外部キー制約の一意/プライマリのキーテーブルとして参照できるようにします
- OWNERSHIP:テーブルに対する包括的な制御を付与します
- ALL [ PRIVILEGES ]:テーブルで「OWNERSHIP」を除くすべての権限を付与します
*テーブル以外の権限については、次の参照元ページよりご確認ください。
参照元:アクセス制御権限
権限の付与:GRANT 権限 TO ROLE
<権限付与(例)>
例えば、ロールAにSALESテーブルのSELECT権限を付与する場合、
GRANT SELECT ON TABLE SALES TO ROLE ロールA
をSnowflakeで実行することで、権限の付与が行われます。
権限の削除:REVOKE 権限 FROM ROLE
<権限削除(例)>
例えば、ロールAからSALESテーブルのSELECT権限を削除する場合、
REVOKE SELECT ON TABLE SALES FROM ROLE ロールA
をSnowflakeで実行することで、権限の削除が行われます。
まとめ
Snowflakeのアクセス制御についての仕組みやアクセス制御が可能なオブジェクト対象、ロールの割り当て方や権限の種類や付与/削除の方法について、ご理解いただけたでしょうか?
是非、Snowflakeのロールを用いたアクセス制御をご活用いただくことで、現場の見たいと内部統制(データマネジメント)を両立していただければと思います。
弊社ISIDは、データマネジメントの専門家として、お客様のデータ一元管理やデータ活用における戦略策定、データドリブン経営の実現に向けた真の“使える”データマネジメント基盤構築のご支援をしております。
データ分析基盤の豊富な構築実績に基づくノウハウを体系化したサービスをご提供しておりますので、データ活用でお悩みの際は、是非、ISIDまでお声掛けください。
https://itsol.isid.co.jp/snowflake/inquiry/
*本記事は、2022年12月1日時点の情報を基に作成しています。
製品・サービスに関する詳しいお問い合わせは、ISIDのWebサイトからお問い合わせください。