※今後加筆修正する可能性あり(2022.11.27現在)
Snowflakeを使ってデータウェアハウス(Data Warehouse 以下DWH)の構築を行った。DWH内に複数あるテーブルに対して、各ロールごとにアクセスの権限を付与する際、すべてのテーブルに一括で権限を付与する方法が難しかったので、忘れないためにまとめる。
対象:初めてSnowflake上にデータベース・スキーマ・テーブルを構築する人
筆者の経験値:初めてSnowflakeを扱う
この記事の目的:ロールに対して、複数のテーブルに一括してアクセス権限を付与する方法
ロール
SnowflakeでDWHを構築する際、DWHを設計する人・閲覧する人・DWH内のデータを使う(挿入更新削除)人のように、役割に応じてDWHにアクセスする権限を切り替えたい場合がある。(例:データを見るだけの役割の人がデータを勝手に更新・削除できてしまってはデータの管理上問題がある。データを見るだけの役割の人にはデータを見る権限のみを与えるようにしなければならない)
これらの役割をロールという。
ロールへの権限付与で生じた課題
SnowflakeはSQL文を叩くか、GUIで操作することでアクセス権限を付与できる。たとえば、SQL文で特定のテーブルに権限付与するとしたら以下のようになる。
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;
しかしこのやり方だと、1個1個のテーブルにいちいちSQL文を書いては実行書いては実行…を繰り返さなければならずめんどくさい。
各ロールへの権限を一括付与
grant select
on future tables in database d1
to role r1;
「未来のテーブルに対して権限を付与する」ということにすれば、テーブルを作成するごとに付与した権限が適用されるので、便利!
参究
※以下、よくわかっていないこと
上述のやり方では、「未来のテーブルに対して」権限を付与する内容だが、既存のテーブルにも一括で権限を付与したい時はどうしたらいいのか...?
Snowflakeの使い方やエラー解消に関する日本語のサイトが公式ドキュメント以外に乏しく、今回Qiita記事を書くに至った。今後Snowflakeを扱う人に参考に慣れればと思う。
参考