カテゴリ:

ユーザーとセキュリティ DDL (アクセス制御)

GRANT OWNERSHIP

オブジェクト(またはスキーマ内の指定されたタイプのすべてのオブジェクト)の所有権を、あるロールから別のロールに転送します。OWNERSHIP は、あるロールから別のロールにのみ付与できる特別なタイプの権限です。取り消すことはできません。詳細については、 Snowflakeのアクセス制御 をご参照ください。

このコマンドは GRANT <権限> ... TO ROLE のバリエーションです。

こちらもご参照ください:

REVOKE <権限> ... FROM ROLE

構文

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

条件:

objectType ::=
  { ROLE | USER | WAREHOUSE | DATABASE | SCHEMA | TABLE | VIEW | STAGE | FILE FORMAT | STREAM | TASK | PIPE | INTEGRATION | FUNCTION | PROCEDURE | SEQUENCE }
schemaObjectsType ::=
  { TABLES | VIEWS | STAGES | FILE FORMATS | FUNCTIONS | PROCEDURES | SEQUENCES | STREAMS | TASKS }

必須パラメーター

objectType オブジェクト名 または . ALL schemaObjectsType IN SCHEMA スキーマ名

単一オブジェクト(指定されたタイプ)の所有権を転送するか、指定されたタイプ(指定されたスキーマ内)のすべてのスキーマオブジェクトの所有権を転送するかを指定します。

  • 単一オブジェクトの場合は、すべてのオブジェクトタイプがサポートされます。

    ROLE | USER | WAREHOUSE | DATABASE | SCHEMA | TABLE | VIEW | STAGE | FILE FORMAT | STREAM | TASK | PIPE | FUNCTION | PROCEDURE | SEQUENCE

  • スキーマオブジェクトの場合は、次のオブジェクトタイプのみがサポートされます。

    TABLES | VIEWS | STAGES | FILE FORMATS | FUNCTIONS | PROCEDURES | SEQUENCES | STREAMS | TASKS

名前

オブジェクトの所有権が転送されるロールの識別子。

オプションのパラメーター

[ REVOKE | COPY ] CURRENT GRANTS

所有権が新しいロールに転送されたときに、オブジェクトの既存のアウトバウンド権限をすべて削除するか、転送するかを指定します。

REVOKE

RESTRICT セマンティクスを適用します。この場合、所有権を新しいロールに譲渡する前に、オブジェクトのすべてのアウトバウンド権限を削除する必要があります。これは、新しい所有ロールが、すでに付与された権限を持つオブジェクトを意図せずに継承することがないようにするためです。

所有権を転送した後、オブジェクトの権限をロールで明示的に再付与する必要があります。

COPY

オブジェクトの既存のアウトバウンド権限のコピーとともに、オブジェクトの所有権を転送します。転送後、新しい所有者はシステムでコピーされたアウトバウンド権限の付与者として識別されます(つまり、オブジェクトの SHOW GRANTS 出力では、すべての権限の GRANTED_BY 列に新しい所有者がリストされます)。その結果、所有権の変更前にその後再付与された権限は、元の付与者ロールに依存しなくなります。

CASCADE オプションを指定して REVOKE <権限> ... FROM ROLE を使用して権限を取り消しても、これらの以前は依存していた権限は再帰的に取り消されません。許可は明示的に取り消す必要があります。

このパラメーターには、 GRANT OWNERSHIP コマンドを実行するロールで、アカウントに対する MANAGE GRANTS 権限が必要です。

デフォルト: REVOKE CURRENT GRANTS

使用上の注意

  • MANAGE GRANTS 権限を持つロールは、オブジェクトの所有権を任意のロールに譲渡できます。対照的に、 MANAGE GRANTS 権限を持たないロールは、所有権をそれ自体からロール階層内の子ロールのみに譲渡できます。

  • オブジェクトにアウトバウンド(つまり依存)権限が存在する場合、 GRANT OWNERSHIP ステートメントはブロックされます。オブジェクトの所有者(またはそれ以上の役割)は、現在のすべての権限を新しい所有者のロールに対して明示的にコピーするか( COPY CURRENT GRANTS オプションを使用)、所有権を譲渡する にオブジェクトのすべてのアウトバウンド権限を取り消します( REVOKE CURRENT GRANTS オプションを使用)。

  • 所有権の譲渡は、コマンドが発行された時点の既存のオブジェクトのみに影響します。コマンドの発行後に作成されたオブジェクトはすべて、オブジェクトの作成時に使用されるロールによって所有されます。

所有権を 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;