Snowflakeで付与されている権限を知りたいときに使うSHOW GRANTSコマンドを一通り試してみた #SnowflakeDB
※本エントリは、Snowflakeをもっと使いこなそう! Advent Calendar 2022の8日目の記事となります。
さがらです。
Snowflakeを使う上で、「このロールにどんな権限を付与しているっけ?」「このオブジェクトを使えるのはどのロールだ?」のように、権限周りのことを知りたいことは非常に多いです。
そんな時は基本的にSHOW GRANTS
コマンドを使うのですが、下記の公式Docを見ただけでもたくさんの構文があります。正直、私もどの構文を使うべきかわからなくなることが多いですw
そこで本記事では、この公式Doc上の構文を一通り試してみたので、その内容をまとめてみます。
注意点
SHOW GRANTS
コマンドですが、実行時のロールによって表示される結果が変わります。
明確な範囲は確認できていないのですが、SHOW GRANTS
コマンド実行時のロールがUSAGE
権限を持つオブジェクトに関しては、結果が返ってくることを確認しています。
そのため、SHOW GRANTS
コマンドを実行してアカウント上で該当するすべての結果を確認したい場合には、以下の2点に注意したほうが良いと感じました。
- なるべく上位のロールを使用する(
ACCOUNTADMIN
が望ましい) - ユーザーが個別に作成したカスタムロールは
SYSADMIN
の子に連なるようにする- 親子関係に含まれていないと、
ACCOUNTADMIN
でSHOW GRANTS
コマンドを実行したときに漏れるリスクがあるため
- 親子関係に含まれていないと、
SHOW GRANTS
現在ログインしているユーザーに付与されているロールの一覧を返します。
構文的には、SHOW GRANTS TO USER current_user
と同じ結果を返します。
SHOW GRANTS ON ACCOUNT
このアカウント上で何かのロールに付与されているAccount-level(Global) Privilegeの一覧を返します。
例えば、デフォルトのロールであるSYSADMIN
には最初からCREATE DATABASE
とCREATE WAREHOUSE
というAccount-level Privilegeが付与されています。
また、ユーザーが意図的に付与したAccount-level Privilegeは、granted_by
列に、付与を行ったロール名が記載されています。Account-level Privilegeは強めの権限であることが多いので、定期的にgranted_by
列がNULLでないカラムをチェックすることで、過剰なAccount-level Privilegeが付与されていないか監視することもできます。
※上の図を見て「APPADMIN
ってなんだ?」と私はなったのですが、どうやらウェブインターフェースで操作する際に使われる内部用のロールのようです。
SHOW GRANTS ON [object_type] [object_name]
指定した[object_type] [object_name]に対する各権限が付与されているロールの一覧を返します。
例えば、[object_type]
に「DATABASE」、[object_name]
に「任意のデータベース名」を入れて実行すると、OWNERSHIP
やCREATE SCHEMA
などデータベースに関わる各権限がどのロールに付与されているかわかります。
SHOW GRANTS TO { ROLE [role_name] | USER [user_name] | SHARE [share_name] }
指定したROLE・USER・SHAREに付与されている権限、あるいはロールの一覧を返します。
例えばROLE
の場合、指定したロールに付与されている権限とロールの一覧がわかります。
またUSER
の場合、指定したユーザーに付与されているロールの一覧を返します。
SHOW GRANTS OF ROLE [role_name]
指定したロールを付与している、ロールの一覧を返します。
下図のようにrole
列に指定したロール名が入り、grantee_name
に指定したロールが付与されているロール名が入って、結果が返ってきます。
SHOW FUTURE GRANTS IN SCHEMA [schema_name]
指定したスキーマに対するFUTURE GRANTが付与されている、ロールの一覧を返します。
下図のようにgrant_on
列に付与されているFUTURE GRANTの名前が出てきて、対応するgrantee_name
にそのFUTURE GRANTが付与されているロール名が出てきます。
SHOW FUTURE GRANTS IN DATABASE [database_name]
指定したデータベースに対するFUTURE GRANTが付与されている、ロールの一覧を返します。
下図のようにgrant_on
列に付与されているFUTURE GRANTの名前が出てきて、対応するgrantee_name
にそのFUTURE GRANTが付与されているロール名が出てきます。
SHOW FUTURE GRANTS TO ROLE [role_name]
指定したロールに付与されている、各FUTURE GRANTの一覧を返します。
下図のように、grant_on
列に付与されているFUTURE GRANTの名前が出てきて、対応するgrantee_name
にそのFUTURE GRANTが付与されているロール名が出てきます。
最後に
Snowflakeで付与されている権限を知りたいときに使うSHOW GRANTSコマンドを一通り試してみました。
自分でまとめてみて、今後このブログは自分が一番見ることになるかもしれないなと感じていますw
皆さんの参考にもなると嬉しいです!