背景
自分用メモとして公開します。
Snowflakeを触り始めてずっとロール:ACCOUNTADMINで操作していました。
「自分は管理者だし~」とか思って。
そろそろACCOUNTADMINを使うのはやめて、デフォルトロールをSYSADMINにしたり、
タスク実行用のカスタムロール(以降、タスク用ロールと記載)を作成したりしてみました。
やったことメモ
タスク用ロールを作成。ここはGUIで設定
タスク用ウェアハウスを作成。ここはGUIで設定。X-Smallの1分停止設定
ウェアハウスのOWNERSHIPをタスク用ロールに設定
GRANT OWNERSHIP ON WAREHOUSE IDENTIFIER($タスク用WH) TO ROLE IDENTIFIER($タスク用ロール);
該当タスクのOWNERSHIPをタスク用ロールに設定
GRANT OWNERSHIP ON TASK IDENTIFIER($タスク名) TO ROLE IDENTIFIER($タスク用ロール);
該当タスクから呼ばれるプロシージャーのOWNERSHIPをタスク用ロールに設定
GRANT OWNERSHIP ON PROCEDURE IDENTIFIER($プロシージャー名) TO ROLE IDENTIFIER($タスク用ロール);
DBに該当タスクのUSAGE権限付与
GRANT USAGE ON TASK DATABASE IDENTIFIER($DB名) TO ROLE IDENTIFIER($タスク用ロール);
スキーマに該当タスクのUSAGE権限付与
GRANT USAGE ON SCHEMA IDENTIFIER($スキーマ名) TO ROLE IDENTIFIER($タスク用ロール);
S3接続用のインテグレーションに該当タスクのUSAGE権限付与
GRANT USAGE ON INTEGRATION $インテグレーション名 TO ROLE $タスク用ロール;
外部ステージに該当タスクのUSAGE権限付与
GRANT USAGE ON STAGE $外部ステージ名 TO ROLE $タスク用ロール;
今後追加されるかもしれない外部ステージにも権限付与されるように
GRANT USAGE ON FUTURE STAGES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
既存テーブルに該当タスクのSELECT/INSERT/UPDATE/DELETE権限付与
GRANT SELECT ON ALL TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT INSERT ON ALL TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT UPDATE ON ALL TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT DELETE ON ALL TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
今後追加されるかもしれないテーブルにも権限付与されるように
GRANT SELECT ON FUTURE TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT INSERT ON FUTURE TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT UPDATE ON FUTURE TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
GRANT DELETE ON FUTURE TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
既存ダイナミックテーブルに該当タスクのSELECT権限付与
GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
今後追加されるかもしれないテーブルにも権限付与されるように
GRANT SELECT ON FUTURE DYNAMIC TABLES IN SCHEMA $スキーマ名 TO ROLE $タスク用ロール;
ファイルフォーマットに該当タスクのUSAGE権限付与
GRANT USAGE ON FILE FORMAT IDENTIFIER($ファイルフォーマット名) TO ROLE IDENTIFIER($タスク用ロール);
感想
意外とやらなきゃいけないことが多い。
ちょっと設定してはタスク実行してみて、不足事項を見つけて追加していった。
書いたコードがIDENTITIER~っていうのがあるやつとないやつ混在してしまった。