REVOKE (ルーチン特権) ステートメント

この形式の REVOKE ステートメントは、モジュール内で定義されていないルーチン (関数、メソッド、またはプロシージャー) に対する特権を取り消します。

呼び出し

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

許可

このステートメントの許可 ID が持つ特権には、ACCESSCTRL または SECADM 権限が含まれているか、またはルーチンが含まれるスキーマに対する ACCESSCTRL 権限が含まれている必要があります。

構文

Read syntax diagramSkip visual syntax diagramREVOKE EXECUTE ONfunction-designatorFUNCTIONschema.*method-designatorMETHOD * FORtype-nameschema.*procedure-designatorPROCEDUREschema.*FROM ,USERGROUPROLEauthorization-namePUBLIC BY ALLRESTRICT
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

説明

EXECUTE
識別されたユーザー定義の関数、メソッド、またはプロシージャーを実行する特権を取り消します。
関数指定子 (function-designator)
特権を取り消す関数を一意的に識別します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
関数 schema.*
スキーマ中の既存の関数と将来作成される関数に関する明示的な権限付与を識別します。 schema.* 特権を取り消しても、 特定の関数に付与された特権は取り消されません。 動的 SQL ステートメント中でスキーマが指定されていない場合は、 CURRENT SCHEMA 特殊レジスター中のスキーマが使用されます。 静的 SQL ステートメント中でスキーマが指定されていない場合は、 QUALIFIER プリコンパイル/BIND オプション中のスキーマが使用されます。
メソッド指定子 (method-designator)
特権を取り消すメソッドを一意的に識別します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
METHOD *
タイプ type-name の既存のメソッドと将来作成されるメソッドに関する明示的な権限付与を識別します。 * 特権を取り消しても、特定のメソッドに付与された特権は取り消されません。
FOR タイプ名
指定されたメソッドを検索する際のタイプを指定します。 ここで指定される名前は、 カタログに既に記述されているタイプを示すものでなければなりません (SQLSTATE 42704)。 動的 SQL ステートメントでは、 CURRENT SCHEMA 特殊レジスターの値が、修飾子のないタイプ名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイル/BIND オプションによって、 修飾子のないタイプ名に修飾子が暗黙指定されます。 type-name の代わりにアスタリスク (*) を使用して、 スキーマ中のすべての既存のタイプと将来作成されるタイプの、 すべての既存のメソッドと将来作成されるメソッドに対する明示的な権限付与を識別することもできます。 アスタリスクを使用したメソッドおよび type-name に関する特権を取り消しても、 特定のメソッドまたは特定のタイプのすべてのメソッドに付与された特権は取り消されません。
プロシージャー指定子 (procedure-designator)
特権を取り消すプロシージャーを一意的に識別します。 詳しくは、 関数、メソッド、およびプロシージャーの指定子を参照してください。
プロシージャー schema.*
スキーマ中の既存のプロシージャーと将来作成されるプロシージャーに関する明示的な権限付与を識別します。 schema.* 特権を取り消しても、 特定のプロシージャーに付与された特権は取り消されません。 動的 SQL ステートメント中でスキーマが指定されていない場合は、 CURRENT SCHEMA 特殊レジスター中のスキーマが使用されます。 静的 SQL ステートメント中でスキーマが指定されていない場合は、 QUALIFIER プリコンパイル/BIND オプション中のスキーマが使用されます。
FROM
EXECUTE 特権を誰から取り消すかを指定します。
ユーザー
authorization-name がユーザーであることを指定します。
GROUP
authorization-name がグループ名であることを指定します。
ROLE
authorization-name がロール名であることを指定します。
権限名
1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。

この許可 ID のリストに、このステートメントを発行するユーザーの許可 ID を含めることはできません (SQLSTATE 42502)。

PUBLIC
PUBLIC から EXECUTE 特権を取り消します。
BY ALL
EXECUTE 特権の付与者にかかわらず、 EXECUTE 特権を明示的に付与されたユーザーのうち、指定された人から取り消します。 これがデフォルトの動作です。
RESTRICT
以下の条件の両方が該当する場合に、EXECUTE 特権を取り消せないことを指定します (SQLSTATE 42893)。
  • 指定されたルーチンがビュー、トリガー、制約、索引拡張、SQL 関数、SQL メソッド、集約インターフェース関数、 またはトランスフォーム・グループ中で使用されているか、 または指定されたルーチンがソース関数の SOURCE として参照されている。
  • EXECUTE 特権がなくなると、 ビュー、トリガー、制約、索引拡張、SQL 関数、SQL メソッド、集約インターフェース関数、トランスフォーム・グループ、 またはソース関数の所有者が、指定されたルーチンを実行できなくなる。

ルール

  • スキーマ 'SYSIBM' または 'SYSFUN' を使って定義された 関数やメソッドに対する EXECUTE 特権を取り消すことはできません (SQLSTATE 42832)。
  • 指定したそれぞれの authorization-name に関して、USER、GROUP、ROLE のいずれも指定されていない場合には、次のようになります。
    • 被認可者を authorization-name とする SYSCAT.ROUTINEAUTH カタログ・ビューで指定されたオブジェクトのすべての行について、次のことが言えます。
      • すべての行の GRANTEETYPE が「U」の場合、USER であると見なされます。
      • すべての行の GRANTEETYPE が「G」の場合、GROUP であると見なされます。
      • すべての行の GRANTEETYPE が「R」の場合、ROLE であると見なされます。
      • すべての行の GRANTEETYPE の値が同じでない場合、エラーが戻されます (SQLSTATE 56092)。

  • パッケージがルーチン (関数、メソッド、またはプロシージャー) に依存し、そのルーチンに対する EXECUTE 特権が PUBLIC、ユーザー、またはロールから取り消された場合、そのルーチンが関数またはメソッドである場合にはパッケージは作動不能になり、そのルーチンがプロシージャーである場合にはパッケージは無効になります (パッケージ所有者がまだそのルーチンに対する EXECUTE 特権を保持している場合を除く)。 パッケージ所有者は、次の場合に EXECUTE 特権を保持したままにできます。
    • パッケージ所有者に明示的に EXECUTE 特権が付与された場合
    • パッケージ所有者が EXECUTE 特権を保持するロールのメンバーである場合
    • EXECUTE 特権が PUBLIC に付与された場合
    • EXECUTEIN 特権が PUBLIC に付与された場合
    静的パッケージではグループ特権は考慮されないため、パッケージ所有者が属するグループが EXECUTE 特権を保持している場合でも、パッケージは作動不能 (関数またはメソッドである場合)、または無効 (プロシージャーである場合) になります。

  • 例 1: ユーザー JONES から、関数 CALC_SALARY に対する EXECUTE 特権を取り消します。 スキーマ中に CALC_SALARY という名前の関数が 1 つだけ含まれていると想定しています。
       REVOKE EXECUTE ON FUNCTION CALC_SALARY FROM JONES RESTRICT
  • 例 2: 現行サーバー上のすべてのユーザーから、 プロシージャー VACATION_ACCR に対する EXECUTE 特権を取り消します。
       REVOKE EXECUTE ON PROCEDURE VACATION_ACCR FROM PUBLIC RESTRICT
  • 例 3: HR (Human Resources) から、 関数 NEW_DEPT_HIRES に対する EXECUTE 特権を取り消します。 この関数には、2 つの入力パラメーターがあり、 それぞれのパラメーターのタイプは INTEGER および CHAR(10) です。 スキーマに NEW_DEPT_HIRES という名前の関数が複数あることを想定しています。
       REVOKE EXECUTE ON FUNCTION NEW_DEPT_HIRES (INTEGER, CHAR(10))
         FROM HR RESTRICT
  • 例 4: タイプ EMPLOYEE のメソッド SET_SALARY に対する EXECUTE 特権をユーザー Jones から取り消します。
       REVOKE EXECUTE ON METHOD SET_SALARY FOR EMPLOYEE FROM JONES RESTRICT