TRANSFER OWNERSHIP ステートメント

TRANSFER OWNERSHIP ステートメントは、データベース・オブジェクトの所有権を転送します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • オブジェクトの所有権
  • SECADM 権限

構文

Read syntax diagramSkip visual syntax diagramTRANSFER OWNERSHIP OFobjects TOnew-ownerREVOKE PRIVILEGESPRESERVE PRIVILEGES
objects
Read syntax diagramSkip visual syntax diagramalias-designatorCONSTRAINTtable-name constraint-nameDATABASE PARTITION GROUPdb-partition-group-nameEVENT MONITORevent-monitor-namefunction-designatorFUNCTION MAPPINGfunction-mapping-nameINDEXindex-nameINDEX EXTENSIONindex-extension-namemethod-designatorNICKNAMEnicknamePACKAGEpackage-nameVERSIONversion-idprocedure-designatorSCHEMAschema-nameSEQUENCEsequence-nameTABLEtable-nameTABLE HIERARCHYroot-table-nameTABLESPACEtablespace-nameTRIGGERtrigger-nameDISTINCTTYPEtype-nameTYPE MAPPINGtype-mapping-nameVARIABLEvariable-nameVIEWview-nameVIEW HIERARCHYroot-view-nameXSROBJECTxsrobject-name
alias-designator
Read syntax diagramSkip visual syntax diagram PUBLICALIASalias-nameFOR TABLEFOR SEQUENCE
function-designator
Read syntax diagramSkip visual syntax diagramFUNCTIONfunction-name(,data-type)SPECIFIC FUNCTIONspecific-name
method-designator
Read syntax diagramSkip visual syntax diagramMETHODmethod-name(,data-type)FORtype-nameSPECIFIC METHODspecific-name
procedure-designator
Read syntax diagramSkip visual syntax diagramPROCEDUREprocedure-name(,data-type)SPECIFIC PROCEDUREspecific-name
new-owner
Read syntax diagramSkip visual syntax diagramUSERauthorization-nameSESSION_USERSYSTEM_USER

説明

別名指定子 (alias-designator)
別名 alias-name
所有権を転送する別名を指定します。 alias-name (別名) は、 カタログに記述されている別名を指定する名前でなければなりません (SQLSTATE 42704)。 PUBLIC が指定される場合、alias-name は現在のサーバーに存在するパブリック別名を指定するものでなければなりません (SQLSTATE 42704)。
FOR TABLE、または FOR SEQUENCE
別名のオブジェクト・タイプを指定します。
FOR TABLE
別名は、表、ビュー、またはニックネームに対するものです。 別名の所有権が転送されると、SYSCAT.TABLES カタログ・ビューにある別名の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
FOR SEQUENCE
別名は、シーケンスに対するものです。 別名の所有権が転送されると、SYSCAT.SEQUENCES カタログ・ビューにある別名の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
制約 table-name.constraint-name
所有権を転送する制約を指定します。 table-name.constraint-name (表名.制約名) の組み合わせは、 制約とそれが制約する表を指定していなければなりません。 constraint-name (制約名) は、カタログに記述されている制約を指定していなければなりません (SQLSTATE 42704)。
制約の所有権が転送されると、SYSCAT.TABCONST カタログ・ビューにある制約の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
  • 制約が FOREIGN KEY 制約である場合、SYSCAT.REFERENCES カタログ・ビューにある OWNER 列が、新規所有者の許可 ID に置き換えられます。
  • 制約が PRIMARY KEY または UNIQUE 制約である場合、この制約のために暗黙的に作成された索引の SYSCAT.INDEXES カタログ・ビューにある OWNER 列が、新規所有者の許可 ID に置き換えられます。 索引が存在しており、この場合にそれが再利用されるのであれば、索引の所有者は変更されません。
データベース・パーティション・グループ db-partition-group-name
所有権を転送するデータベース・パーティション・グループを指定します。 db-partition-group-name は、カタログに記述されているデータベース・パーティション・グループを指定していなければなりません (SQLSTATE 42704)。

データベース・パーティション・グループの所有権が転送されると、SYSCAT.DBPARTITIONGROUPS カタログ・ビューにあるデータベース・パーティション・グループの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

EVENT MONITOR イベント・モニター名
所有権を転送するイベント・モニターを指定します。 event-monitor-name (イベント・モニター名) は、 既にカタログに存在するイベント・モニターを指定していなければなりません (SQLSTATE 42704)。

イベント・モニターの所有権が転送されると、SYSCAT.EVENTMONITORS カタログ・ビューにあるイベント・モニターの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

指定されたイベント・モニターがアクティブになっている場合、エラーが戻されます (SQLSTATE 429BT)。

所有権を転送する WRITE TO FILE イベント・モニターのターゲット・パスにイベント・ファイルが存在する場合、そのイベント・ファイルは削除されません。

WRITE TO TABLE イベント・モニターの所有権が転送される場合、SYSCAT.EVENTTABLES カタログ・ビューの表情報は保持されます。

関数指定子 (function-designator)
所有権を転送する関数を指定します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。 指定する関数インスタンスは、カタログに記述されたユーザー定義関数、または関数テンプレートでなければなりません。 CREATE TYPE ステートメントによって暗黙的に生成された関数の所有権は転送できません (SQLSTATE 429BT)。

関数の所有権が転送されると、SYSCAT.ROUTINES カタログ・ビューにある関数の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。 関連パッケージを持つ SQL 関数の所有権を転送すると、パッケージの所有者も新規所有者に暗黙的に転送されます。

SPECIFIC FUNCTION 特定名
関数の作成時に指定された特定の関数名、またはデフォルト値として使用された特定の関数名を使用して、所有権を転送する特定のユーザー定義関数を指定します。 動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターが、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイルまたはバインド・オプションが、非修飾オブジェクト名の修飾子を暗黙に指定します。 specific-name (特定名) は、 指定したスキーマまたは暗黙のスキーマの特定の関数のインスタンスを指定していなければなりません。 そうでない場合、エラーが戻されます (SQLSTATE 42704)。

特定の関数の所有権が転送されると、SYSCAT.ROUTINES カタログ・ビューにある特定の関数の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

FUNCTION MAPPING function-mapping-name
所有権を転送する関数マッピングを指定します。 function-mapping-name (関数マッピング名) は、 カタログに記述されている関数マッピングを指定していなければなりません (SQLSTATE 42704)。

関数マッピングの所有権が転送されると、SYSCAT.FUNCMAPPINGS カタログ・ビューにある関数マッピングの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

INDEX 指標名
所有権を転送する索引または SPECIFICATION ONLY 指定の索引を指定します。 index-name (索引名) は、 カタログに記述されている索引または SPECIFICATION ONLY 指定の索引を指定していなければなりません (SQLSTATE 42704)。

索引の所有権が転送されると、SYSCAT.INDEXES カタログ・ビューにある索引の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

索引が定義されている表がグローバル一時表である場合、索引の所有権は転送できません (SQLSTATE 429BT)。

INDEX EXTENSION index-extension-name
所有権を転送する索引拡張を指定します。 index-extension-name (索引拡張名) は、 カタログに記述されている索引拡張を指定する名前でなければなりません (SQLSTATE 42704)。

索引拡張の所有権が転送されると、SYSCAT.INDEXEXTENSIONS カタログ・ビューにある索引拡張の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

メソッド指定子 (method-designator)
所有権を転送するメソッドを指定します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。 指定するメソッドの本体は、カタログに記述されているメソッドでなければなりません (SQLSTATE 42704)。 CREATE TYPE ステートメントによって暗黙的に生成されたメソッドの所有権は転送できません (SQLSTATE 429BT)。

メソッドの所有権が転送されると、SYSCAT.ROUTINES カタログ・ビューにあるメソッドの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

NICKNAME ニックネーム
所有権を転送するニックネームを指定します。 nickname (ニックネーム) は、 カタログに記述されているニックネームでなければなりません (SQLSTATE 42704)。

ニックネームの所有権が転送されると、SYSCAT.TABLES カタログ・ビューにあるニックネームの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

PACKAGE パッケージ名
所有権を転送するパッケージを指定します。 パッケージ名は、カタログに記述されているパッケージを識別するものでなければなりません (SQLSTATE 42704)。
VERSION バージョン ID
所有権を転送するパッケージ・バージョンを指定します。 値が指定されない場合には、空ストリングがバージョンのデフォルトになり、このパッケージの所有権が転送されます。 パッケージ名が同じでバージョンが異なる複数のパッケージが存在する場合には、version-id (バージョン ID) が TRANSFER OWNERSHIP ステートメントに指定されているパッケージの所有権のみが転送されます。 次のような場合は、バージョン ID を二重引用符で区切ってください。
  • バージョン ID が VERSION(AUTO) プリコンパイラー・オプションによって生成された場合
  • バージョン ID が数字で始まる場合
  • バージョン ID が小文字であったり、大/小文字混合である場合
ステートメントをオペレーティング・システムのコマンド・プロンプトから呼び出す場合は、 各二重引用符の区切り文字の前に円記号を置いて、オペレーティング・システムによって区切り文字が外されないようにします。

パッケージの所有権が転送されると、SYSCAT.PACKAGES カタログ・ビューにあるパッケージの BOUNDBY 列の値が、新規所有者の許可 ID に置き換えられます。

SQL プロシージャー、コンパイル済み SQL 関数、またはコンパイル済みトリガーに関連したパッケージの所有権は転送できません (SQLSTATE 429BT)。

プロシージャー指定子 (procedure-designator)
所有権を転送するプロシージャーを指定します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。 指定するプロシージャー・インスタンスは、カタログに記述されたプロシージャーでなければなりません。

プロシージャーの所有権が転送されると、SYSCAT.ROUTINES カタログ・ビューにあるプロシージャーの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

関連パッケージを持つ SQL プロシージャーの所有権を転送すると、パッケージの所有者も新規所有者に暗黙的に転送されます。

SPECIFIC PROCEDURE 特定名
プロシージャーの作成時に指定された特定の名前、またはデフォルト値として使用された特定の名前を使用して、所有権を転送する特定のプロシージャーを指定します。 動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターが、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイルまたはバインド・オプションが、非修飾オブジェクト名の修飾子を暗黙に指定します。 specific-name (特定名) は、 指定したスキーマまたは暗黙のスキーマの特定プロシージャーのインスタンスを指定していなければなりません。 そうでない場合、エラーが戻されます (SQLSTATE 42704)。

特定のプロシージャーの所有権が転送されると、SYSCAT.ROUTINES カタログ・ビューにある特定のプロシージャーの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

SCHEMA スキーマ名
所有権を転送するスキーマを指定します。 schema-name に指定するスキーマ名は、 カタログに記述されているスキーマを指定するものでなければなりません (SQLSTATE 42704)。

スキーマの所有権が転送されると、 SYSCAT.SCHEMATA カタログ・ビュー内のスキーマの OWNER 列 および DEFINER 列 の値は、新規所有者の許可 ID に置き換えられます。

組み込みスキーマの所有権 (定義者は SYSIBM) は転送できません (SQLSTATE 42832)。

SEQUENCE シーケンス名
所有権を転送するシーケンスを指定します。 sequence-name (シーケンス名) は、カタログに記述されているシーケンスを指定していなければなりません (SQLSTATE 42704)。

シーケンスの所有権が転送されると、SYSCAT.SEQUENCES カタログ・ビューにあるスキーマの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

TABLE テーブル名
所有権を転送する表を指定します。 table-name は、データベースに存在する表を指定していなければならず (SQLSTATE 42704)、宣言済み一時表を指定してはなりません (SQLSTATE 42995)。
表の所有権が転送されると、以下のようになります。
  • SYSCAT.TABLES カタログ・ビューにある表の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
  • SYSCAT.TABDEP カタログ・ビューにある表のすべての従属オブジェクトの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

表階層内の副表の所有権は転送できません (SQLSTATE 429BT)。

フェデレーテッド・システムでは、透過 DDL を使用して作成されたリモート表の所有権は転送できます。 リモート表の所有権を転送しても、表に関連したニックネームの所有権は転送されません。 そうしたニックネームの所有権は、TRANSFER OWNERSHIP ステートメントを使用して、明示的に転送できます。

表階層 root-table-name
所有権を転送する、型付き表階層のルート表である型付き表を指定します。 root-table-name で指定する型付き表は、型付き表階層のルート表でなければなりません (SQLSTATE 428DR)。また、データベースに存在する型付き表を参照する必要があります (SQLSTATE 42704)。
表階層の所有権が転送されると、以下のようになります。
  • SYSCAT.TABLES カタログ・ビューにあるルート表およびそのすべての副表の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
  • SYSCAT.TABDEP カタログ・ビューにある表のすべての従属オブジェクトおよびそのすべての副表の OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
TABLESPACE 表スペース名
所有権を転送する表スペースを指定します。 tablespace-name (表スペース名) は、カタログに記述されている表スペースを指定していなければなりません (SQLSTATE 42704).

表スペースの所有権が転送されると、SYSCAT.TABLESPACES カタログ・ビューにある表スペースの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

TRIGGER トリガー名
所有権を転送するトリガーを指定します。 trigger-name (トリガー名) は、 カタログに記述されているトリガーを指定していなければなりません (SQLSTATE 42704)。

トリガーの所有権が転送されると、SYSCAT.TRIGGERS カタログ・ビューにあるトリガーの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。 コンパイル済みトリガーの所有権を転送すると、関連パッケージの所有者も新規所有者に暗黙的に転送されます。

TYPE タイプ名
所有権を転送するユーザー定義タイプを指定します。 type-name (タイプ名) は、カタログに記述されているタイプを指定していなければなりません (SQLSTATE 42704)。 DISTINCT 節が指定されている場合、type-name (タイプ名) は、 カタログに記述されている特殊タイプを指定していなければなりません (SQLSTATE 42704)。

動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターが、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイルまたはバインド・オプションが、非修飾オブジェクト名の修飾子を暗黙に指定します。

タイプの所有権が転送されると、SYSCAT.DATATYPES カタログ・ビューにあるタイプの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

TYPE MAPPING タイプ・マッピング名
所有権を転送するユーザー定義データ・タイプ・マッピングを指定します。 type-mapping-name (タイプ・マッピング名) は、 カタログに記述されているデータ・タイプ・マッピングを指定していなければなりません (SQLSTATE 42704)。

タイプ・マッピングの所有権が転送されると、SYSCAT.TYPEMAPPINGS カタログ・ビューにあるタイプ・マッピングの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

VARIABLE 変数名
所有権が転送されるオブジェクトは、作成されたグローバル変数であることを示します。 variable-name は、現在のサーバーに存在するグローバル変数を指定するものでなければなりません (SQLSTATE 42704)。

グローバル変数が転送されると、SYSCAT.VARIABLES カタログ・ビューにあるグローバル変数の OWNER 列の値が、 新規所有者の許可 ID に置き換えられます。

VIEW ビュー名
所有権を転送するビューを指定します。 view-name (ビュー名) は、データベースに存在しているビューを指定していなければなりません (SQLSTATE 42704)。
ビューの所有権が転送されると、以下のようになります。
  • SYSCAT.VIEWS カタログ・ビューにあるビューの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
  • SYSCAT.TABDEP カタログ・ビューにあるビューのすべての従属オブジェクトの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

ビュー階層内のサブビューの所有権は転送できません (SQLSTATE 429BT)。

VIEW HIERARCHY ルート・ビュー名
所有権を転送する、型付きビュー階層のルート・ビューである型付きビューを指定します。 root-view-name で指定する型付きビューは、型付きビュー階層のルート・ビューでなければなりません (SQLSTATE 428DR)。また、データベースに存在する型付きビューを参照する必要があります (SQLSTATE 42704)。
ビュー階層の所有権が転送されると、以下のようになります。
  • SYSCAT.VIEWS カタログ・ビューにあるルート・ビューおよびそのすべてのサブビューの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
  • SYSCAT.TABDEP カタログ・ビューにあるビューのすべての従属オブジェクトおよびそのすべてのサブビューの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。
XSROBJECT xsrobject-name
所有権を転送する XSR オブジェクトを指定します。 xsrobject-name は、カタログに記述されている XSR オブジェクトを指定するものでなければなりません (SQLSTATE 42704)。

XSR オブジェクトの所有権が転送されると、SYSCAT.XSROBJECTS カタログ・ビューにある XSR オブジェクトの OWNER 列の値が、新規所有者の許可 ID に置き換えられます。

USER 権限名
オブジェクトの所有権の転送先となる許可 ID を指定します。
SESSION_USER
SESSION_USER 特殊レジスターの値を、オブジェクトの所有権の転送先となる許可 ID として使用することを指定します。
SYSTEM_USER
SYSTEM_USER 特殊レジスターの値を、オブジェクトの所有権の転送先となる許可 ID として使用することを指定します。
REVOKE PRIVILEGES
オブジェクトの以前の所有者が、転送中のオブジェクトに対するすべての特権を失うことを指定します。 これはデフォルト・オプションです。
PRESERVE PRIVILEGES
所有権を転送するオブジェクトの現行所有者が、転送後もオブジェクトに対する既存の特権を引き続き保持することを指定します。 例えば、ビューの作成時にビューの作成者に付与された特権は、所有権が別のユーザーに転送された後でも、元の所有者によって引き続き保持されます。

ルール

  • 大半の組み込みオブジェクトの所有権 (所有者は SYSIBM) は転送できません (SQLSTATE 42832)。 ただし、SYSIBM が OWNER 列に含まれており、SYSIBM が DEFINER 列に含まれていない、暗黙的に作成されたスキーマ・オブジェクトの所有権を転送することができます。
  • 名前が SYS で始まるスキーマの所有権は転送できません (SQLSTATE 42832)。
  • 以下のオブジェクトの所有権は明示的に転送できません (SQLSTATE 429BT)。
    • 表階層内の副表 (これはルート階層表とともに転送されます)
    • ビュー階層内のサブビュー (これはルート階層ビューとともに転送されます)
    • グローバル一時表で定義されている索引
    • ユーザー定義タイプの作成時に暗黙的に生成されるメソッドまたは関数
    • モジュール別名およびモジュール
    • SQL プロシージャーに依存するパッケージ (これは SQL プロシージャーとともに転送されます)
    • アクティブになっているイベント・モニター (これは、アクティブでないときに転送できます)
  • SECADM 権限を持つ許可 ID は、まだオブジェクトの所有者となっていない場合、そのオブジェクトの所有権を自分自身に転送できません (SQLSTATE 42502)。
  • 取り消す特権に依存しているオブジェクトが存在する場合、REVOKE PRIVILEGES を指定した変数またはシーケンスの所有権の転送は失敗します (SQLSTATE 42893)。
  • 以下の条件の両方が該当する場合に、ルーチンに対して REVOKE PRIVILEGES を指定した関数の所有権の転送は失敗します (SQLSTATE 42893)。
    • 指定されたルーチンがビュー、トリガー、制約、索引拡張、SQL 関数、SQL メソッド、 またはトランスフォーム・グループ中で使用されているか、 または指定されたルーチンがソース関数の SOURCE として参照されている。
    • EXECUTE 特権がなくなると、 ビュー、トリガー、制約、索引拡張、SQL 関数、SQL メソッド、トランスフォーム・グループ、 またはソース関数の所有者が、指定されたルーチンを実行できなくなる。
  • REVOKE PRIVILEGES を指定してモジュール、表、ビュー、ニックネーム、またはルーチンの所有権を転送すると、 以前の所有者がデータベース権限やスキーマ権限によって、またはグループ、役割、PUBLIC によって特権を取り消していなければ、 従属のビュー、MQT、関数、トリガー、およびパッケージに作動不能または無効のマークが付きます。

  • オブジェクトの作成の一部として付与された、現行所有者が持っている特権はすべて、新規所有者に転送されます。 現在の所有者がオブジェクトに対する特権を取り消されてから、その特権を再び付与された場合、その特権は移されません。 まだ転送されていない暗黙的に作成されたスキーマ・オブジェクトの場合、新しい所有者には、スキーマに対する CREATEIN、DROPIN、および ALTERIN が付与され、これらの特権のみを他のユーザーに付与することもできます。
  • データベース・オブジェクトの所有権を転送する場合、新規所有者は、オブジェクトの従属関係で示されているように、基本オブジェクトに対する特権のセットを持っていなければなりません。これは、オブジェクトの存在を未変更のまま維持するために必要なものです。 新規所有者は、オブジェクトの存在を維持するためにそれらの特権が必要でなければ、オブジェクトの作成に必要な特権を必要としません。
    以下に例を示します。
    • 基礎表に対して SELECT および INSERT の従属関係を持つビューについて考慮します。 所有権の転送が成功するためには、ビューの新規所有者が保持する特権に、少なくとも SELECT (GRANT OPTION があってもなくても可) および INSERT (GRANT OPTION があってもなくても可) が含まれている必要があります。 従属関係が SELECT WITH GRANT OPTION と INSERT WITH GRANT OPTION である場合、ビューの新規所有者が保持する特権には、少なくとも SELECT WITH GRANT OPTION と INSERT WITH GRANT OPTION が含まれていなければなりません。
    • ルーチンに対して従属関係を持つビューについて考慮します。 ビューの新規所有者が保持する特権には、少なくとも従属ルーチンに対する EXECUTE が含まれている必要があります。
    • 表に対して従属関係を持つトリガーについて考慮します。 トリガーの新規所有者が保持する特権には、トリガーの従属関係によって示される、表に対する同じ特権のセットが含まれている必要があります。 トリガーが定義されている表に対する ALTER 特権は必須ではありません。
    以下の表は、その他のデータベース・オブジェクトが依存するオブジェクトを記述した、カタログ・ビューをリストしています。
    表 1. その他のオブジェクトが依存するオブジェクトを記述したカタログ・ビュー
    データベース・オブジェクト カタログ・ビュー
    CONSTRAINT SYSCAT.CONSTDEP
    FUNCTION SYSCAT.ROUTINEDEP; SYSCAT.ROUTINES (ソース派生関数の場合)
    索引 SYSCAT.INDEXDEP
    INDEX EXTENSION SYSCAT.INDEXEXTENSIONDEP
    METHOD SYSCAT.ROUTINEDEP
    PACKAGE SYSCAT.PACKAGEDEP
    PROCEDURE SYSCAT.ROUTINEDEP
    テーブル SYSCAT.TABDEP
    TRIGGER SYSCAT.TRIGDEP
    VIEW SYSCAT.TABDEP
    XSROBJECT SYSCAT.XSROBJECTDEP
    別のオブジェクトに依存するデータベース・オブジェクトの所有権を正常に転送するには、データベース・オブジェクトの新規所有者は、その従属関係の従属オブジェクトに対する一定の特権を保持する必要があります。
    • 従属オブジェクトがシーケンスである場合、新規所有者はそのシーケンスに対する USAGE 特権を持っている必要があります。
    • 従属オブジェクトが関数、メソッド、またはプロシージャーである場合、新規所有者は、その関数、メソッド、またはプロシージャーに対する EXECUTE 特権を持っている必要があります。
    • 従属オブジェクトがパッケージである場合、新規所有者はそのパッケージに対する EXECUTE 特権を持っている必要があります。
    • 従属オブジェクトが XSR オブジェクトである場合、新規所有者はその XSR オブジェクトに対する USAGE 特権を持っている必要があります。
    それ以外の従属関係の従属オブジェクトの場合、該当するカタログ・ビューの TABAUTH 列を使用して、新規所有者が保持する必要がある特権を判別してください。
  • オブジェクトの所有権をその所有者に転送しようとする場合、警告が戻されます (SQLSTATE 01676)。
  • 次のデータベース・オブジェクトには所有者がいないため、その所有権を転送できません。 それは、監査ポリシー、バッファー・プール、ロール、 セキュリティー・ラベル、セキュリティー・ラベル・コンポーネント、セキュリティー・ポリシー、サーバー、 トランスフォーメーション関数、トラステッド・コンテキスト、ユーザー・マッピング、 およびラッパーの各オブジェクトです。 SYSCAT.AUDITPOLICIES、SYSCAT.BUFFERPOOLS、 SYSCAT.CONTEXTS、 SYSCAT.ROLES、SYSCAT.SECURITYLABELS、 SYSCAT.SECURITYLABELCOMPONENTS、SYSCAT.SECURITYPOLICIES、 SYSCAT.SERVERS、SYSCAT.TRANSFORMS、SYSCAT.USEROPTIONS、 および SYSCAT.WRAPPERS カタログ・ビューには OWNER 列がないことに注意してください。
  • 所有権が転送されたオブジェクトのスキーマ名が自動的に変わることはありません。
  • 代替構文: 他の SQL ステートメントとの整合性:
    • DATABASE PARTITION GROUP の代わりに NODEGROUP を指定できます。
    • ALIAS の代わりに SYNONYM を指定できます。

  • 例 1: 表 T1 の所有権を PAUL に転送します。
       TRANSFER OWNERSHIP OF TABLE WALID.T1
         TO USER PAUL PRESERVE PRIVILEGES
    SYSCAT.TABLES カタログ・ビューにある表 WALID.T1 の OWNER 列の値が、'PAUL' に置き換えられます。 Paul には表 WALID.T1 に対する次のような特権が暗黙的に付与されます (表の以前の所有者がその表に対する特権を何も失っていないと想定)。それは、CONTROL および ALTER、DELETE、INDEX、INSERT、SELECT、UPDATE、REFERENCE (WITH GRANT OPTION) です。
  • 例 2: JOHN が表 T1 および T2 を作成し、MIKE が表 JOHN.T1 および JOHN.T2 に対する SELECT 特権を保持していると想定します。 MIKE は、表 JOHN.T1 および JOHN.T2 に依存するビュー V1 を作成します。 ビュー V1 の所有権を、DBADM 権限を持つ HENRY に転送します。
       TRANSFER OWNERSHIP OF VIEW V1
         TO USER HENRY PRESERVE PRIVILEGES
    SYSCAT.VIEWS カタログ・ビューにあるビュー V1 の OWNER 列の値が、'HENRY' に置き換えられます。 SYSCAT.TABAUTH に新規行が追加されます。その値は、GRANTOR = 'SYSIBM'、GRANTEE = 'HENRY'、および TABNAME = 'V1' です。
  • 例 3: DBADM 権限を持つ HENRY が、表 T1 に依存するトリガー TR1 を作成すると想定します。 トリガー TR1 の所有権を、DBADM 権限を保持しない WALID に転送します。
       TRANSFER OWNERSHIP OF TRIGGER TR1
         TO USER WALID PRESERVE PRIVILEGES
    Walid が DBADM 権限を保持していなくても、トリガーの所有権は正常に転送されます。
  • 例 4: JOHN が表 T1 および T2 を作成し、MIKE が表 JOHN.T1 に対する SELECT 特権と、表 JOHN.T2 に対する CONTROL 特権を保持していると想定します。 PAUL は、表 JOHN.T1 および JOHN.T2 に対する SELECT 特権を保持しています。 MIKE は、表 JOHN.T1 および JOHN.T2 に依存するビュー V1 を作成します。 ビューには、SYSCAT.TABAUTH に SELECT 特権の 1 つの項目と、SYSCAT.TABDEP に表 JOHN.T1 および JOHN.T2 の 2 つの SELECT 従属関係があります。 ビュー V1 の所有権を、通常ユーザーである PAUL に転送します。
       TRANSFER OWNERSHIP OF VIEW V1
         TO USER PAUL PRESERVE PRIVILEGES
    Paul が表 JOHN.T2 に対する CONTROL 特権を保持していなくても、ビューの所有権は正常に転送されます。 Paul は、ビューの存在を保持するために、表 JOHN.T1 および JOHN.T2 に対する SELECT 特権だけを必要とします。 (ビューには SELECT 特権しかありません。なぜなら、Paul はビューの作成時に両方の表に対する CONTROL 特権を保持しておらず、結果としてビューに対する CONTROL が付与されていないからです。) SYSCAT.VIEWS カタログ・ビューにあるビュー V1 の OWNER 列の値が、'PAUL' に置き換えられます。 SYSCAT.TABDEP カタログ・ビューにあるビュー V1 の OWNER 列の値が、'PAUL' に置き換えられます。 SYSCAT.TABAUTH に新規行が追加されます。その値は、GRANTOR = 'SYSIBM'、GRANTEE = 'PAUL'、および TABNAME = 'V1' です。
  • 例 5: JOHN が表 T1 を作成し、PUBLIC が JOHN.T1 に対する SELECT 特権を保持していると想定します。 PAUL は JOHN.T1 に対する SELECT 特権を明示的に保持し、表 JOHN.T1 に依存するビュー V1 を作成します。 ビュー V1 の所有権を MIKE に転送します。MIKE は DBADM ではありませんが、 特別なグループ PUBLIC を介して、 ビューの所有権を取得するのに必要な特権を保持しています。
       TRANSFER OWNERSHIP OF VIEW V1
         TO USER MIKE PRESERVE PRIVILEGES
    Mike は PUBLIC を介して表 JOHN.T1 に対する SELECT 特権を保持しているため、ビューの所有権は正常に転送されます。 SYSCAT.VIEWS カタログ・ビューにあるビュー V1 の OWNER 列の値が、'MIKE' に置き換えられます。 SYSCAT.TABDEP カタログ・ビューにあるビュー V1 の OWNER 列の値が、'MIKE' に置き換えられます。 SYSCAT.TABAUTH に新規行が追加されます。その値は、GRANTOR = 'SYSIBM'、GRANTEE = 'MIKE'、および TABNAME = 'V1' です。
  • 例 6: 例 5 と同様に、JOHN が表 T1 を作成し、 ロール R1 が JOHN.T1 に対する SELECT 特権を保持していると想定します。 PAUL は JOHN.T1 に対する SELECT 特権を明示的に保持し、表 JOHN.T1 に依存するビュー V1 を作成します。 ビュー V1 の所有権を MIKE に転送します。MIKE は DBADM ではありませんが、ロール R1 のメンバーシップを介して、 ビューの所有権を取得するのに必要な特権を保持しています。
       TRANSFER OWNERSHIP OF VIEW V1
         TO USER MIKE PRESERVE PRIVILEGES
    Mike はロール R1 のメンバーシップを介して 表 JOHN.T1 に対する SELECT 特権を保持しているため、ビューの所有権は正常に転送されます。 SYSCAT.VIEWS カタログ・ビューにあるビュー V1 の OWNER 列の値が、'MIKE' に置き換えられます。 SYSCAT.TABDEP カタログ・ビューにあるビュー V1 の OWNER 列の値が、'MIKE' に置き換えられます。 SYSCAT.TABAUTH に新規行が追加されます。その値は、GRANTOR = 'SYSIBM'、GRANTEE = 'MIKE'、および TABNAME = 'V1' です。