GRANT OWNERSHIP¶
オブジェクトまたはスキーマ内で指定された型のオブジェクトすべての所有権を、あるロールから別のロールに転送します。ロール とは、ロールまたはデータベースロールのいずれかを指します。
OWNERSHIP は、あるロールから別のロールにのみ付与できる特別なタイプの権限です。取り消すことはできません。詳細については、 アクセス制御の概要 をご参照ください。
このコマンドは GRANT <権限> ... TO ROLE のバリエーションです。
- こちらもご参照ください。
構文¶
クラスのインスタンスでないオブジェクト型の場合。
GRANT OWNERSHIP
  { ON {
            <object_type> <object_name>
          | ALL <object_type_plural> IN { DATABASE <database_name> | SCHEMA <schema_name> }
       }
    | ON FUTURE <object_type_plural> IN { DATABASE <database_name> | SCHEMA <schema_name> }
  }
  TO { ROLE <role_name> | DATABASE ROLE <database_role_name> }
  [ { REVOKE | COPY } CURRENT GRANTS ]
クラスのインスタンスの場合。
GRANT OWNERSHIP
  ON  <class_name> <instance_name>
  TO { ROLE <role_name> | DATABASE ROLE <database_role_name> }
  [ { REVOKE | COPY } CURRENT GRANTS ]
必須パラメーター¶
- object_name
- 所有権を譲渡するオブジェクトの識別子を指定します。 
- object_type
- オブジェクトの型を指定します。 - 次のいずれかを使用します。 - AGGREGATION POLICY
- ALERT
- AUTHENTICATION POLICY
- COMPUTE POOL
- CORTEX SEARCH SERVICE
- DATA METRIC FUNCTION
- DATABASE
- DATABASE ROLE
- DBT PROJECT
- DYNAMIC TABLE
- EVENT TABLE
- EXTERNAL TABLE
- EXTERNAL VOLUME
- FAILOVER GROUP
- FILE FORMAT
- FUNCTION
- GIT REPOSITORY
- ICEBERG TABLE
- IMAGE REPOSITORY
- INTEGRATION
- JOIN POLICY
- MATERIALIZED VIEW
- NETWORK POLICY
- NETWORK RULE
- PACKAGES POLICY
- PIPE
- PROCEDURE
- MASKING POLICY
- PASSWORD POLICY
- PRIVACY POLICY
- PROJECTION POLICY
- REPLICATION GROUP
- RESOURCE MONITOR
- ROLE
- ROW ACCESS POLICY
- SCHEMA
- SEMANTIC VIEW
- SESSION POLICY
- SECRET
- SEQUENCE
- SNAPSHOT
- SNAPSHOT POLICY
- SNAPSHOT SET
- 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 <権限> ... FROM ROLE を使用して権限を取り消しても、これらの以前は依存していた権限は再帰的に取り消されません。許可は明示的に取り消す必要があります。- COPYパラメーターには、少なくとも次のうちの1つが必要です。- アクティブなロールには、アカウントに対する MANAGEGRANTS 権限があります。 
- アクティブなロールは、新しい所有者(またはそれ以上)のロールです。PUBLIC はすべてのロールに付与されるため、システムロール PUBLIC は自然にこの要件に捉えられます。 
 - アクティブなロールは、プライマリロールとセカンダリロールの両方を考慮します。詳細については、 アクティブロール をご参照ください。 
 - デフォルト: なし。どちらの操作も、既存のアウトバウンド権限に対しては実行されません。 - 注釈 - オブジェクトに対する既存のアウトバウンド権限が取り消されておらず、コピーされていない場合、 GRANT OWNERSHIP ステートメントは失敗します。 
使用上の注意¶
- 以下のオブジェクトの OWNERSHIP 権限は譲渡できません。 - APPLICATION ROLE
- CONNECTION- 接続オブジェクトに対する OWNERSHIP 権限を持つことができるのは、 ACCOUNTADMIN ロールのみです。 
- クラス のインスタンス。 
- 機械学習オブジェクト(つまり、モデル、モデルバージョン、モデルモニター)。 
- SERVICE
- SHARE
 
- オブジェクトにアウトバウンド(つまり、依存)権限が存在する場合、 GRANT OWNERSHIP ステートメントはブロックされます。オブジェクトの所有者(またはそれ以上のロール)は、現在のすべての権限を新しい所有者のロールに対して明示的にコピーするか( - COPY CURRENT GRANTSオプションを使用)、所有権を譲渡する 前 にオブジェクトのすべてのアウトバウンド権限を取り消します(- REVOKE CURRENT GRANTSオプションを使用)。- ロールオブジェクトの場合、これらの句を指定しないと、ロールを新しい所有者ロールに移行する際に GRANT OWNERSHIP ステートメントはブロックされません。新しい所有者ロールが更新されます。しかし、 - SHOW GRANTS OF ROLE transferred_roleコマンドを実行すると、移行されたロールの2つの行が同じユーザーに付与されていることがわかります。- granted_by列で、1行の値は元の所有者ロールによる付与です。
- granted_by列で、他の行の値は新しい所有者ロールによる付与です。
 - Snowflakeは共有データベース上で GRANT OWNERSHIP ... REVOKE CURRENT GRANTS コマンドを実行できないようにしています。詳細については、このトピックの 共有データベース の例をご参照ください。 
- 所有権の譲渡は、コマンドが発行された時点の既存のオブジェクトのみに影響します。コマンドの発行後に作成されたオブジェクトはすべて、オブジェクトの作成時に使用されるロールによって所有されます。 
- 次に挙げるタイプのオブジェクト所有権の譲渡は、追加の条件が満たされない限りブロックされます。 - パイプ:
- パイプを一時停止する必要があります。 
- タスク:
- スケジュールされたタスクを中断する必要があります。指定されたデータベースまたはスキーマ内のすべてのタスクが別のロールに転送されると、Snowflakeはコンテナー内のすべてのタスクを自動的に中断します。 - COPY CURRENT GRANTSオプションを使用して同じロールに転送されたタスクも自動的に中断されます。詳細については、 タスクセキュリティ をご参照ください。
 
- 同じオブジェクトタイプに対する 将来の付与がデータベースレベルとスキーマレベルの両方で定義されている場合、スキーマレベルの付与がデータベースレベルの付与に優先し、データベースレベルの付与は無視されます。 
- マテリアライズドビューの所有権を付与するには、 - GRANT OWNERSHIP ON VIEWを使用します。個別の- GRANT OWNERSHIP ON MATERIALIZED VIEWステートメントはありません。
- ハイブリッドテーブルの所有権を付与するには、 - GRANT OWNERSHIP ON TABLEを使用します。個別の- GRANT OWNERSHIP ON HYBRID TABLEステートメントはありません。
- 共有に対する OWNERSHIP 権限を譲渡することはできません。また、接続に対する OWNERSHIP 権限を譲渡することもできません。ACCOUNTADMIN ロールのみが接続を所有できます。 
- 動的テーブルに対する OWNERSHIP 権限を付与する場合は、受信ロールが動的テーブルを含むデータベースとスキーマ、またテーブルのリフレッシュに使用するウェアハウスに対する USAGE 権限を持っていることを確認してください。そうしないと、その後のリフレッシュに失敗します。 
- 将来の動的テーブルに対する OWNERSHIP 権限を付与します。 
- Apache Iceberg™ テーブルの所有権を別のロールに移行するとき、Snowflake はテーブルに関連付けられた外部ボリューム(およびテーブルが外部管理されている場合はカタログ統合)の OWNERSHIP 権限を移行しません。 - ターゲット・ロールにテーブルとその関連オブジェクトを完全に制御させるには、ロールに外部ボリュームおよびカタログ統合の 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;