【Snowflake】Snowflake ~ GRANT OWNERSHIP ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/11/16/231010

で、アクセス制御で少し触れた GRANT OWNERSHIP を使って
所有者の変更したので、メモしておく

目次

【1】GRANT OWNERSHIP
 1)オプション「[ REVOKE | COPY ] CURRENT GRANTS」
 補足:アウトバウンド権限とは?
【2】所有者権限の付与
 1)データベースの所有者権限付与
 2)スキーマの所有者権限付与
 3)ロールの所有者権限付与
 4)ユーザの所有者権限付与
【3】所有権の変更について
 1)テーブルの所有権の変更

【1】GRANT OWNERSHIP

https://docs.snowflake.com/ja/sql-reference/sql/grant-ownership.html
構文

GRANT OWNERSHIP
   ON { objectType <object_name> | ALL schemaObjectsType IN SCHEMA <schema_name> }
   TO ROLE <name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

1)オプション「[ REVOKE | COPY ] CURRENT GRANTS」

https://docs.snowflake.com/ja/sql-reference/sql/grant-ownership.html#optional-parameters

* 所有権が新しいロールに変更される際、
 オブジェクトの既存のアウトバウンド権限(※)すべてを
 削除する or 譲渡するかを指定
# 項目 説明
1 revoke current grants 所有権が新しいロールに譲渡されるとき、オブジェクトの既存のアウトバウンド権限すべてを削除する
2 copy current grants 所有権が新しいロールに譲渡されるとき、オブジェクトの既存のアウトバウンド権限すべてを譲渡する

[1] revoke

* 変更前に前権限を削除する
cf. REVOKE = 取り消す

[2] copy

* 変更前に前権限を引き継がれる(コピーされる)

補足:アウトバウンド権限とは?

https://docs.snowflake.com/ja/sql-reference/sql/grant-ownership.html#optional-parameters

より抜粋
~~~~~~~~
アウトバウンド 権限とは、
所有権が変更される個々のオブジェクトに対して付与される権限を指します。
~~~~~~~~

【2】所有者権限の付与

* 基本「GRANT <権限> ... TO ROLE」の形。

https://docs.snowflake.com/ja/sql-reference/sql/grant-privilege.html

1)データベースの所有者権限付与

構文

GRANT OWNERSHIP ON DATABASE <DB_NAME> TO ROLE <ROLE_NAME>;

2)スキーマの所有者権限付与

構文

GRANT OWNERSHIP ON SCHEMA <SCHEMA_NAME> TO <ROLE_NAME>;

3)ロールの所有者権限付与

構文

GRANT OWNERSHIP ON ROLE <CHILD_ROLE_NAME> TO ROLE <PARENT_ROLE_NAME>;

コマンド例

GRANT OWNERSHIP
 ON USER demo_user
 TO ROLE demo_owner_role;

GRANT OWNERSHIP
 ON ROLE demo_role
 TO ROLE demo_owner_role;

4)ユーザの所有者権限付与

構文

GRANT OWNERSHIP ON USER <USER_NAME> TO ROLE <ROLE_NAME>;

コマンド例

GRANT OWNERSHIP
 ON USER demo_user
 TO ROLE demo_owner_role;

【2】所有権の変更について

* 変更についても、GRANT OWNERSHIP を使う(ALTER XXXじゃない)

1)テーブルの所有権の変更

構文例

-- revoke|copy => revoke or copy どっちか選択
grant ownership on table <対象テーブル>
 to role <変更したロール> revoke|copy current grants;

revoke

-- test_db.public.test_table テーブルの所有権をadminロールに変更。
-- その際、現在のアウトバウンド権限すべての破棄し adminロールに付与
grant ownership on table "test_db"."public"."test_table" to role admin revoke current grants;

-- [構文]
-- grant ownership on table <対象テーブル>
--  to role <変更したいロール> revoke current grants;

copy

-- test_db.public.test_table テーブルの所有権をadminロールに変更。
-- その際、現在のアウトバウンド権限すべてのコピーとともに adminロールに付与
grant ownership on table "test_db"."public"."test_table"
 to role admin copy current grants;

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / データ型 ~
https://dk521123.hatenablog.com/entry/2021/12/16/095524
Snowflake ~ 基本編 / キャスト ~ ~
https://dk521123.hatenablog.com/entry/2021/12/15/162658
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / アクセス制御 ~
https://dk521123.hatenablog.com/entry/2021/11/16/231010
Snowflake ~ 基本編 / ゼロコピークローン ~
https://dk521123.hatenablog.com/entry/2021/11/27/134934
Snowflake ~ SHOW / DESCRIBE ~
https://dk521123.hatenablog.com/entry/2022/02/24/231532
権限トラブル時のTips
https://dk521123.hatenablog.com/entry/2022/08/19/131922
エラー「Failed to cast variant value "" to XXX」時の対応
https://dk521123.hatenablog.com/entry/2021/12/17/102659