[小ネタ]Snowflakeで「自分が利用可能なロール」の一覧を求める

要は、Oracle Databaseで言うところのSESSION_ROLESが使いたいのですよ。
2020.10.04

前置き:Snowflakeのロールについて

Snowflakeでは権限を"ロール"という単位で管理します。システム管理者やロール作成者からロールの利用権を付与されると、そのユーザはUSE ROLEコマンドやワークシートのメニュー[ロールの切り替え]で、利用が許可されたロールを自身で切り替え、適切な権限を行使することができます(下図参考)。

本題:自分が利用可能なロールをクエリで調べる方法

自分が利用(選択)できるロールの一覧は、SNOWFLAKEデータベースのINFORMATION_SCHEMAスキーマ内にあるAPPLICABLE_ROLESビューを参照します。対応ドキュメントは以下です。

APPLICABLE_ROLESビューのカラム構造は以下です。

列名 データ型 説明
GRANTEE TEXT 権限が付与されるロールまたはユーザー
ROLE_NAME TEXT ロールの名前
ROLE_OWNER TEXT ロールの所有者
IS_GRANTABLE TEXT このロールを他のユーザーに付与できるかどうか

SnowflakeワークシートでAPPLICABLE_ROLESビューを確認します。

SELECT *
FROM snowflake.information_schema.applicable_roles;

このビューへの問い合わせで、直接および間接的に付与(ロールにロールが含まれる状況)されたロールが一覧表示されます。

注意点

注意点としては、表示されるロールに重複が発生する可能性があります。例として下図では、TABLEAU_ROLEが2件付与されています。

  • Row12:別途付与されているACCOUNT_SYSADMINTABLEAU_ROLEが含まれている(=間接的に付与されている)
  • Row13:ユーザYOSUKE_KATSUKIに直接TABLEAU_ROLEロールが与えられている

本来は、同じロールを複数付与する必要はないので、これを確認してロールの付与方法を検討するのも良いと思います。

以上、ご参考になれば幸いです。