[Snowflake]ロールに付与した権限を確認する

こういう時はROLE_SYS_PRIVSって名前のデータディクショナリがありましてね…ないのか!!
2021.03.08

はじめに

Snowflakeには、データベースを管理するためのGUI画面が提供されています。Snowflakeにおける権限管理の基本となるロールの管理も、まず自身のロールをSECURITYADMINACCOUNTADMINに切り替えた上で、[アカウント]-[ロール]に移動すれば可能です(下図)。

ただ、この画面では「ロールがどのユーザ及びロールに付与されているか」は確認できるものの、「ロールの中にどのような権限が含まれているか」を確認することができません。本エントリではその確認方法について紹介します。

SHOW GRANTSコマンドを使う

まあ、結論はこれだけなんですがね…。以前のエントリSNOWFLAKE.INFORMATION_SCHEMA.APPLICABLE_ROLESビューを参照する方法を知ったものだから、てっきり同じような権限情報を格納したビューがあると思いこんで、だいぶ探してしまいました。

気を取り直して、早速コマンドを実行します。例として、弊社で実施しているSnowflakeハンズオンイベントの内容を少しだけ利用します。

確認用ロールの作成と権限付与

ロールの作成はよく使われるSYSADMINロールでは実施できません。SECURITYADMINか、それを包含するACCOUNTADMINロールである必要があります。

USE ROLE accountadmin;

例として、JUNIOR_DBAロールを作成し、ロールに対し作成済みのデータベースの利用(USAGE)権限を与えます。

CREATE ROLE junior_dba;
GRANT USAGE ON DATABASE citibike TO ROLE junior_dba;
GRANT USAGE ON DATABASE weather TO ROLE junior_dba;

ロール内の権限確認

ここで先程紹介したコマンドの出番です。作成したロールの中身を確認してみましょう。

SHOW GRANTS TO ROLE junior_dba;

以下の結果を得ました。

表示されたカラムは、それぞれ以下の意味を持ちます。

カラム名 意味
created_on 権限操作によって新たにレコードが作成された日時
privilege 付与した権限の種類
granted_on 権限付与対象の種類
name 権限付与対象の名前
granted_to 非権限付与対象の種類
grantee_name 非権限付与対象の種類
grant_option 権限は操作特権付きか
granted_by 権限を付与の操作を行ったロール

読み解くと、それぞれ2つのデータベース(CITIBIKE, WEATHER)の使用(USAGE)権限を、JUNIOR_DBAロールに特権操作なしで付与しているとわかります。

このコマンドで、ロールの設定を確認してください。