💡

Snowflakeでテーブル追加のたびにgrantを打たなくてよくする方法

2022/06/08に公開

前置き

こんにちは。株式会社GENDAのこみぃです。

今日のお話はSnowflake運用の軽いTipsです。

allは今存在するテーブル

Snowflakeでユーザーに参照権限を付ける場合には以下のようなgrant文を打つことになります。

grant-all
grant select on all tables in schema test to role test_user;

ここでall tablesというのは そのタイミングで存在しているすべてのテーブル を指します
つまりこの後テーブルが追加された場合にはtest_userは参照できません。そのタイミングで存在していなかったからです。

futureは今後作られるテーブル

さて、今後作られるすべてのテーブルに対しての権限を付けるには 今後作られるという意味の単語が必要 であり、それはallではないということになります。

ではそんな単語はあるのかというと、それが future です。
逆にfutureは現在のテーブルは一切含まないので、allとfutureを足すとようやく求めている意味での全てのテーブルということになります。

futureにgrantすればOK

そういうわけで、テーブル追加のたびにgrantを打たなくてよくするためにはfutureに対してgrantを打てばOKです。

grant-future
grant select on future tables in schema test to role test_user;

テーブルとViewも別

ちなみにallとfutureが別だったように、テーブルとViewも別です。
テーブルとViewを意識して区別する意味がないなら、以下のように全て打っておくといいかもしれませんね。

grant-full
grant select on all tables in schema test to role test_user;
grant select on future tables in schema test to role test_user;
grant select on all views in schema test to role test_user;
grant select on future views in schema test to role test_user;

結びの言葉

データ基盤は機密情報などを含むデータを扱うこともあり、権限管理は割りとしっかりやらないといけません。
だからこそ手間は少なくしたいので、こういったTipsはしっかり抑えて無駄な工数を削りたいですね。

さらに詳細が聞きたいという方は、私がわかる範囲であればお答えしますので、Twitterあたりでお気軽にお声がけください。
@kommy_jp

なお、株式会社GENDAでは、一緒に働くデータ関連の人材を絶賛募集中です。
興味がある方は是非お声がけください。
https://genda.jp/

本日はこのあたりで。
それじゃあ、バイバイ!

Discussion