GRANT OWNERSHIP¶
オブジェクトまたはスキーマ内で指定された型のオブジェクトすべての所有権を、あるロールから別のロールに転送します。 ロール とは、ロールまたはデータベースロールのいずれかを指します。
OWNERSHIP は、あるロールから別のロールにのみ付与できる特別なタイプの権限です。取り消すことはできません。詳細については、 アクセス制御の概要 をご参照ください。
このコマンドは GRANT <権限> のバリエーションです。
- こちらもご参照ください。
構文¶
-- Role
GRANT OWNERSHIP
{ ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
| ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
TO ROLE <role_name>
[ { REVOKE | COPY } CURRENT GRANTS ]
-- Database role
GRANT OWNERSHIP
{ ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
| ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
TO DATABASE ROLE <database_role_name>
[ { REVOKE | COPY } CURRENT GRANTS ]
必須パラメーター¶
object_name
所有権を譲渡するオブジェクトの識別子を指定します。
object_type
オブジェクトの型を指定します。
AGGREGATION POLICY
ALERT
AUTHENTICATION POLICY
COMPUTE POOL
DATABASE
DATABASE ROLE
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
EXTERNAL VOLUME
FAILOVER GROUP
FILE FORMAT
FUNCTION
HYBRID TABLE
ICEBERG TABLE
IMAGE REPOSITORY
INTEGRATION
MATERIALIZED VIEW
NETWORK POLICY
NETWORK RULE
PACKAGES POLICY
PIPE
PROCEDURE
MASKING POLICY
PASSWORD POLICY
PROJECTION POLICY
REPLICATION GROUP
ROLE
ROW ACCESS POLICY
SCHEMA
SESSION POLICY
SECRET
SEQUENCE
STAGE
STREAM
TABLE
TAG
TASK
USER
VIEW
WAREHOUSE
object_type_plural
object_type
の複数形(例:TABLES
、VIEWS
)。パイプへの一括付与は許可されていないことに注意してください。
role_name
オブジェクトの所有権が転送されるロールの識別子。
database_role_name
オブジェクトの所有権が転送されるデータベースロールの識別子。識別子が完全修飾されていない場合(
db_name.database_role_name
の形式)、コマンドはセッションの現在のデータベースでデータベースロールを検索します。所有権は、データベースロールを含むデータベース内のオブジェクトに限定されます。
オプションのパラメーター¶
[ REVOKE | COPY ] CURRENT GRANTS
所有権が新しいロールに転送されたときに、オブジェクトの既存のアウトバウンド権限をすべて削除するか、転送するかを指定します。
注釈
アウトバウンド 権限とは、所有権が変更される個々のオブジェクトに対して付与される権限を指します。
ロールの所有権を譲渡する場合の現在の付与は、(ロール階層を作成するために)現在のロールに付与されたすべてのロールを意味します。現在の権限がコピーされた状態でロールの所有権が譲渡された場合、 SHOW GRANTS コマンドの出力には、現在のロールに子ロールを付与する者として新しい所有者が表示されます。
REVOKE
RESTRICT セマンティクスを適用します。この場合、所有権を新しいロールに譲渡する前に、オブジェクトのすべてのアウトバウンド権限を削除する必要があります。これは、新しい所有ロールが、すでに付与された権限を持つオブジェクトを意図せずに継承することがないようにするためです。
所有権を譲渡した後、オブジェクトの権限をロールで明示的に再付与する必要があります。
データベースまたはスキーマ内で指定された型の将来のオブジェクトに対する所有権をロールに付与する場合(GRANT OWNERSHIP ON FUTURE
<オブジェクト型>
を使用)、 REVOKE キーワードは機能しないことに注意してください。COPY
オブジェクトの既存のアウトバウンド権限のコピーとともに、オブジェクトの所有権を転送します。転送後、新しい所有者はシステムでコピーされたアウトバウンド権限の付与者として識別されます(つまり、オブジェクトの SHOW GRANTS 出力では、すべての権限の GRANTED_BY 列に新しい所有者がリストされます)。その結果、所有権の変更前にその後再付与された権限は、元の付与者ロールに依存しなくなります。
CASCADE
オプションを指定して REVOKE <権限> を使用して権限を取り消しても、これらの以前は依存していた権限は再帰的に取り消されません。許可は明示的に取り消す必要があります。このパラメーターには、 GRANT OWNERSHIP コマンドを実行するロールで、アカウントに対する MANAGE GRANTS 権限が必要です。
デフォルト: なし。どちらの操作も、既存のアウトバウンド権限に対しては実行されません。
注釈
オブジェクトに対する既存のアウトバウンド権限が取り消されておらず、コピーされていない場合、 GRANT OWNERSHIP ステートメントは失敗します。
使用上の注意¶
以下のオブジェクトの OWNERSHIP 権限は譲渡できません。
APPLICATION ROLE
CONNECTION
接続オブジェクトに対する OWNERSHIP 権限を持つことができるのは、 ACCOUNTADMIN ロールのみです。
SERVICE
SHARE
MANAGE GRANTS 権限を持つロールは、オブジェクトの所有権を任意のロールに譲渡できます。対照的に、 MANAGE GRANTS 権限を持たないロールは、所有権をそれ自体からロール階層内の子ロールのみに譲渡できます。
オブジェクトにアウトバウンド(つまり、依存)権限が存在する場合、 GRANT OWNERSHIP ステートメントはブロックされます。オブジェクトの所有者(またはそれ以上のロール)は、現在のすべての権限を新しい所有者のロールに対して明示的にコピーするか(
COPY CURRENT GRANTS
オプションを使用)、所有権を譲渡する 前 にオブジェクトのすべてのアウトバウンド権限を取り消します(REVOKE CURRENT GRANTS
オプションを使用)。Snowflakeは共有データベース上で GRANT OWNERSHIP ... REVOKE CURRENT GRANTS コマンドを実行できないようにしています。詳細については、このトピックの 共有データベース の例をご参照ください。
所有権の譲渡は、コマンドが発行された時点の既存のオブジェクトのみに影響します。コマンドの発行後に作成されたオブジェクトはすべて、オブジェクトの作成時に使用されるロールによって所有されます。
次に挙げるタイプのオブジェクト所有権の譲渡は、追加の条件が満たされない限りブロックされます。
- パイプ:
パイプを一時停止する必要があります。
- タスク:
スケジュールされたタスク(例: スタンドアロンタスク、またはツリー内のルートタスク)は、中断する必要があります。指定されたデータベースまたはスキーマ内のすべてのタスクが別のロールに転送されると、コンテナー内のすべてのタスクが自動的に中断されることに注意してください。
COPY CURRENT GRANTS
オプションを使用して同じロールに転送されたタスクも自動的に中断されます。
将来の 同じオブジェクト型への 許可が、データベースレベルとスキーマレベルの両方で定義されている場合、スキーマレベルの許可はデータベースレベルの許可よりも優先され、データベースレベルの許可は無視されます。
マテリアライズドビューの所有権を付与するには、
GRANT OWNERSHIP ON VIEW...
を使用します。個別のGRANT OWNERSHIP ON MATERIALIZED VIEW
ステートメントはありません。共有に対する OWNERSHIP 権限を譲渡することはできません。また、接続に対する OWNERSHIP 権限を譲渡することもできません。ACCOUNTADMIN ロールのみが接続を所有できます。
動的テーブルに対する OWNERSHIP 権限を付与する場合は、受信ロールが動的テーブルを含むデータベースとスキーマ、またテーブルのリフレッシュに使用するウェアハウスに対する USAGE 権限を持っていることを確認してください。そうしないと、その後のリフレッシュに失敗します。
将来の動的テーブルに対する OWNERSHIP 権限を付与します。
データベースロール:
所有権は、データベースロールと同じデータベース内のオブジェクトに対してのみ譲渡できます。
AUTO_REFRESH
プロパティをFALSE
に設定して、外部テーブルまたはその親データベースの所有権を譲渡すると、テーブルメタデータの自動リフレッシュがブロックされます。所有権を譲渡した後にプロパティをリセットするには、 ALTER EXTERNAL TABLE コマンドを使用します。
例¶
ロール¶
所有権を analyst
ロールに移す前に、現在 manager
ロールが所有している mydb
データベースのすべてのアウトバウンド権限を取り消します。
REVOKE ALL PRIVILEGES ON DATABASE mydb FROM ROLE manager; GRANT OWNERSHIP ON DATABASE mydb TO ROLE analyst; GRANT ALL PRIVILEGES ON DATABASE mydb TO ROLE analyst;この例は、所有権を譲渡するためのデフォルトの(推奨される)マルチステッププロセスを示していることに注意してください。
単一のステップで、 mydb.public
スキーマ内の既存のテーブルに対するすべての権限を取り消し、テーブルの所有権を(現在の権限のコピーとともに) analyst
ロールに譲渡します。
GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO ROLE analyst COPY CURRENT GRANTS;
mydb.public.mytable
テーブルの所有権を、テーブルにある現在のアウトバウンド権限すべてのコピーとともに analyst
ロールに付与します。
GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
データベースロール¶
単一のステップで、 mydb.public
スキーマ内の既存のテーブルに対するすべての権限を取り消し、テーブルの所有権を(現在の権限のコピーとともに) mydb.dr1
データベースロールに譲渡します。
GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO DATABASE ROLE mydb.dr1 COPY CURRENT GRANTS;
mydb.public.mytable
テーブルの所有権を、テーブルにある現在のアウトバウンド権限すべてのコピーとともに mydb.dr1
データベースロールに付与します。
GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE mydb.dr1 COPY CURRENT GRANTS;