カテゴリ:

ユーザーとセキュリティ 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 を使用して権限を取り消しても、これらの以前は依存していた権限は再帰的に取り消されません。許可は明示的に取り消す必要があります。

デフォルト: REVOKE CURRENT GRANTS

注釈

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

使用上の注意

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

  • COPY CURRENT GRANTS オプションを使用して)現在のすべての権限を明示的に新しい所有ロールにコピーすることを選択しない限り、次のタスクを実行して所有権を転送する必要があります。

    1. オブジェクトで REVOKE <権限> ... FROM ROLE を実行します。

    2. オブジェクトで GRANT OWNERSHIP を実行します。

    3. GRANT <権限> ... TO ROLE を使用して、オブジェクトの権限を、必要/希望に応じて、新しい所有ロールに再付与します。

    これは、所有権を転送する際にアクセス権を明示的に制御するために従うべきデフォルトの(推奨される)プロセスです。

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