GRANT OWNERSHIP

オブジェクトまたはスキーマ内で指定された型のオブジェクトすべての所有権を、あるロールから別のロールに転送します。 ロール とは、ロールまたはデータベースロールのいずれかを指します。

OWNERSHIP は、あるロールから別のロールにのみ付与できる特別なタイプの権限です。取り消すことはできません。詳細については、 アクセス制御の概要 をご参照ください。

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

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

REVOKE <権限>

構文

-- 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 ]
Copy

必須パラメーター

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 の複数形(例: TABLESVIEWS)。

パイプへの一括付与は許可されていないことに注意してください。

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 権限を付与します。

    • 動的テーブルが作成時に初期化されるように設定されている場合(つまり、 INITIALIZE = ON_CREATE)は、新しいロールが参照オブジェクトに対して 十分な権限 を持っていることを確認してください。そうしないと、初回のリフレッシュに失敗し、オブジェクトが見つからないというエラーが発生します。

    • 動的テーブルがスケジュール時に初期化されるように設定されている場合(つまり、 INITIALIZE = ON_SCHEDULE)は、新しいロールが参照オブジェクトに対して 十分な権限 を持っていることを確認してください。そうしないと、その後のリフレッシュに失敗します。

  • データベースロール:

    所有権は、データベースロールと同じデータベース内のオブジェクトに対してのみ譲渡できます。

  • 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;
Copy

この例は、所有権を譲渡するためのデフォルトの(推奨される)マルチステッププロセスを示していることに注意してください。

単一のステップで、 mydb.public スキーマ内の既存のテーブルに対するすべての権限を取り消し、テーブルの所有権を(現在の権限のコピーとともに) analyst ロールに譲渡します。

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO ROLE analyst COPY CURRENT GRANTS;
Copy

mydb.public.mytable テーブルの所有権を、テーブルにある現在のアウトバウンド権限すべてのコピーとともに analyst ロールに付与します。

GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
Copy

データベースロール

単一のステップで、 mydb.public スキーマ内の既存のテーブルに対するすべての権限を取り消し、テーブルの所有権を(現在の権限のコピーとともに) mydb.dr1 データベースロールに譲渡します。

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public
  TO DATABASE ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

mydb.public.mytable テーブルの所有権を、テーブルにある現在のアウトバウンド権限すべてのコピーとともに mydb.dr1 データベースロールに付与します。

GRANT OWNERSHIP ON TABLE mydb.public.mytable
  TO ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

共有データベース

共有データベースで OWNERSHIP 権限を譲渡するには、次のコマンドを使用します。

REVOKE USAGE ON DATABASE mydb FROM SHARE myshare;
GRANT OWNERSHIP ON DATABASE mydb TO ROLE r2;
GRANT USAGE ON DATABASE mydb TO ROLE r2;
Copy

必要に応じて、 GRANT <権限> ... TO SHARE コマンドを使用してデータベースを共有に再度付与します。