GRANT (関数特権またはプロシージャー特権)
この形式の GRANT ステートメントは、関数またはプロシージャーに対する特権を認可します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。
権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- ステートメント内で識別された、それぞれの関数またはプロシージャーごとに、
- このステートメントで指定されるすべての特権
- その関数またはプロシージャーに対する *OBJMGT システム権限
- その関数またはプロシージャーが入っているライブラリー (これが Java™ ルーチンの場合は、ディレクトリー) に対する *EXECUTE システム権限
- データベース管理者権限
- セキュリティー管理者権限
WITH GRANT OPTION を指定する場合、ステートメントの権限 ID によって保持される特権には、 少なくとも次の 1 つが含まれていなければなりません。
- その関数またはプロシージャーの所有権
- データベース管理者権限
- セキュリティー管理者権限
構文
.-PRIVILEGES-. >>-GRANT--+-ALL--+------------+-+--ON---------------------------> | .-,-----------. | | V | | '---+-ALTER---+-+-----' '-EXECUTE-' .-,---------------------------------------------------------------------------. | .-,-----------------------------------------------. | V V | | >----+-+-+-FUNCTION-+----function-name--+------------------------------+-+-+---+-+--> | | '-ROUTINE--' '-(--+--------------------+--)-' | | | | | .-,--------------. | | | | | | V | | | | | | '---parameter-type-+-' | | | | .-,-------------. | | | | V | | | | '-SPECIFIC--+-FUNCTION-+----specific-name-+-------------------------' | | '-ROUTINE--' | | .-,------------------------------------------------. | | V | | '-+-+-PROCEDURE-+----procedure-name--+------------------------------+-+-+-' | '-ROUTINE---' '-(--+--------------------+--)-' | | | .-,--------------. | | | | V | | | | '---parameter-type-+-' | | .-,-------------. | | V | | '-SPECIFIC--+-PROCEDURE-+----specific-name-+--------------------------' '-ROUTINE---' .-,---------------------------------. V | >--TO----+-+-------+--authorization-name-+-+--------------------> | +-USER--+ | | '-GROUP-' | '-PUBLIC------------------------' >--+-------------------+--------------------------------------->< '-WITH GRANT OPTION-'
data-type |--+-built-in-type------+---------------------------------------| +-distinct-type-name-+ '-array-type-name----'
built-in-type |--+-+---SMALLINT---+----------------------------------------------------------------------+--| | +-+-INTEGER-+--+ | | | '-INT-----' | | | '---BIGINT-----' | | .-(5,0)------------------------. | +-+-+-DECIMAL-+-+--+------------------------------+-------------------------------------+ | | '-DEC-----' | | .-,0--------. | | | '-+-NUMERIC-+-' '-(--integer--+-----------+--)-' | | '-NUM-----' '-, integer-' | | .-(--52--)------. | +-+-FLOAT--+---------------+--+---------------------------------------------------------+ | | '-(--integer--)-' | | | +-REAL----------------------+ | | | (1) | | | | .-PRECISION-----. | | | '-DOUBLE--+---------------+-' | | .-(--34--)-. | +---DECFLOAT--+----------+--------------------------------------------------------------+ | '-(--16--)-' | | .-(--1--)-------. | +-+-+-+-CHARACTER-+--+---------------+----------+--+----------------+-----------------+-+ | | | '-CHAR------' '-(--integer--)-' | +-FOR BIT DATA---+ | | | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)-' +-FOR SBCS DATA--+ | | | | | '-CHAR------' | +-FOR MIXED DATA-+ | | | | '-VARCHAR----------------' '-ccsid-clause---' | | | | .-(--1M--)-------------. | | | '---+-+-CHARACTER-+--LARGE OBJECT-+----+----------------------+--+----------------+-' | | | '-CHAR------' | '-(--integer--+---+--)-' +-FOR SBCS DATA--+ | | '-CLOB------------------------' +-K-+ +-FOR MIXED DATA-+ | | +-M-+ '-ccsid-clause---' | | '-G-' | | .-(--1--)-------. | +-+---GRAPHIC----+---------------+-------+--+--------------+----------------------------+ | | '-(--integer--)-' | '-ccsid-clause-' | | +-+-GRAPHIC VARYING-+--(--integer--)---+ | | | '-VARGRAPHIC------' | | | | .-(--1M--)-------------. | | | '---DBCLOB----+----------------------+-' | | '-(--integer--+---+--)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-+-NATIONAL CHARACTER-+--+---------------+----------+---------------------+--------+ | | | +-NATIONAL CHAR------+ '-(--integer--)-' | | | | | | '-NCHAR--------------' | | | | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)-' | | | | | +-NATIONAL CHAR------+ | | | | | | '-NCHAR--------------' | | | | | '-NVARCHAR------------------------' | | | | .-(--1M--)-------------. | | | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+-' | | | '-NCHAR--------------' | '-(--integer--+---+--)-' | | '-NCLOB--------------------------------' +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-BINARY--+---------------+---------+-----------------+-----------------------------+ | | | '-(--integer--)-' | | | | | '-+-BINARY VARYING-+--(--integer--)-' | | | | '-VARBINARY------' | | | | .-(--1M--)-------------. | | | '---+-BLOB----------------+----+----------------------+-' | | '-BINARY LARGE OBJECT-' '-(--integer--+---+--)-' | | +-K-+ | | +-M-+ | | '-G-' | +-+-DATE-------------------------+------------------------------------------------------+ | | .-(--0--)-. | | | +-TIME--+---------+------------+ | | | .-(--6--)-------. | | | '-TIMESTAMP--+---------------+-' | | '-(--integer--)-' | | .-(--200--)-----. | +---DATALINK--+---------------+--+--------------+---------------------------------------+ | '-(--integer--)-' '-ccsid-clause-' | +---ROWID-------------------------------------------------------------------------------+ '---XML---------------------------------------------------------------------------------' ccsid-clause |--CCSID--integer-----------------------------------------------|
- 突き合わせは、データ・タイプ (REAL または DOUBLE) に基づいて行われるので、精度に指定された値は、関数の作成時に 指定された値に一致している必要はありません。
説明
- ALL または ALL PRIVILEGES
- 1 つ以上の特権を認可します。認可される特権は、指定された関数またはプロシージャーに対して
ステートメントの権限 ID が持っている認可可能な特権のすべてです。
関数またはプロシージャーに対する ALL PRIVILEGES を認可するのは、
*ALL システム権限を認可するのと同じではないことに注意する必要があります。
ALL を使用しない場合には、以下にリストしたキーワードの 1 つ以上を使用する必要があります。各キーワードは、そこで説明している特権を認可します。
- ALTER
- ALTER FUNCTION、ALTER PROCEDURE、または COMMENT ステートメントを使用する特権を許可します。
- EXECUTE
- 関数またはプロシージャーを実行するための特権を認可します。
- FUNCTION または SPECIFIC FUNCTION
- 特権が認可される関数を指定します。
その関数は現行サーバーに存在していて、ユーザー定義関数でなければなりません。ただし、特殊タイプの作成時に暗黙に生成された関数であってはなりません。関数は、それぞれその名前、関数シグニチャー、あるいは特定名によって識別することができます。
- FUNCTION function-name
- 関数を名前によって識別します。 function-name は厳密に 1 つの関数を示す必要があります。この関数には、パラメーター をいくつでも定義することができます。指定されたスキーマまたは暗黙のスキーマの中に、指定された名前 の関数が複数ある場合、エラーが戻されます。
- FUNCTION function-name (parameter-type, ...)
- 関数を一意的に識別する関数シグニチャーによって、関数を識別します。
function-name
(parameter-type,...) は、指定された関数シグニチャーを持つ関数を識別しなければなりません。
指定されたパラメーターは、関数の作成時に指定された、
対応する位置にあるデータ・タイプと一致していなければなりません。
特権が認可される関数インスタンスを識別する場合、データ・タイプの数とデータ・
タイプの論理連結が使用されます。
データ・タイプの同義語は、一致として扱われます。
デフォルトがあるパラメーターは、このシグニチャーに含まれていなければなりません。
function-name () を指定する場合、識別される関数にパラメーターを使用することはできません。
- function-name
- 関数の名前を識別します。
- (parameter-type, ...)
- 関数のパラメーターを識別します。
非修飾の特殊タイプ名を指定する場合、データベース・マネージャーはその特殊タイプのスキーマ名を解決するための SQL パスを検索します。
長さ属性、精度属性、あるいは位取り属性があるデータ・タイプの場合、以下のいずれかを使用します。
- 空の括弧は、データベース・マネージャーがデータ・タイプの一致の判別に際して属性を無視することを示します。例えば、DEC() は、DEC(7,2) のデータ・タイプで定義された関数のパラメーターに一致するものとみなされます。 ただし、FLOAT に空の括弧を指定することはできません。これは、そのパラメーター値が特定のデータ・タイプ (REAL または DOUBLE) を示しているからです。
- 長さ属性、精度属性、あるいは位取り属性に特定の値を指定した場合、 その値は、CREATE FUNCTION ステートメントの中で暗黙的または明示的に指定された値と正確に一致している必要があります。 データ・タイプが FLOAT の場合、 突き合わせはデータ・タイプ (REAL または DOUBLE) に基づいて行われるので、 精度は指定された値に厳密に一致している必要はありません。
- 長さ属性、精度属性、または位取り属性が明示的に指定されておらず、空の括弧も指定されていない場合、該当のデータ・タイプのデフォルト属性が暗黙指定されます。暗黙の長さは、CREATE FUNCTION ステートメントの中で暗黙的または明示的に指定さ れた値と正確に一致している必要があります。
FOR DATA 文節または CCSID 文節の指定はオプショナルです。 いずれの文節も指定しないと、データ・タイプが一致するかどうかを判定する場合に、データベース・マネージャーが属性を無視することを示します。 どちらか一方の文節を指定する場合は、CREATE FUNCTION ステートメントに 暗黙的または明示的に指定されている値と一致させる必要があります。
- AS LOCATOR
- 関数が、このパラメーターのロケーターを受け取るように定義されることを示します。 AS LOCATOR を指定する場合は、データ・タイプは LOB または XML、あるいは LOB または XML に基づく特殊タイプでなければなりません。
- SPECIFIC FUNCTION specific-name
- 関数を特定名によって識別します。 specific-name は、現行サーバーに存在する特定の関数を示している必要があります。
- PROCEDURE または SPECIFIC PROCEDURE
- 特権が認可されるプロシージャーを指定します。
このプロシージャー名 は、現行サーバーに存在しているプロシージャーを識別していなければなりません。
- PROCEDURE procedure-name
- プロシージャーを名前によって識別します。 プロシージャー名 は、ただ 1 つのプロシージャーを識別していなければなりません。 このプロシージャーには、パラメーターをいくつでも定義することができます。 指定されたスキーマまたは暗黙のスキーマの中に、 指定された名前のプロシージャーが複数ある場合、エラーが戻されます。
- PROCEDURE procedure-name (parameter-type, ...)
- プロシージャーを一意的に識別するプロシージャー・シグニチャーによって、プロシージャーを識別します。
procedure-name (parameter-type,...) では、指定されたプロシージャー・シグニチャーを持つプロシージャーを識別する必要があります。
指定されたパラメーターは、プロシージャーの作成時に指定された、
対応する位置にあるデータ・タイプと一致していなければなりません。
認可するプロシージャー・インスタンスを識別する場合、データ・タイプの数とデータ・タイプの論理連結が使用されます。
データ・タイプの同義語は、一致として扱われます。
デフォルトがあるパラメーターは、このシグニチャーに含まれていなければなりません。
プロシージャー名 () を指定する場合、識別されるプロシージャー にパラメーターを使用することはできません。
- procedure-name
- プロシージャーの名前を識別します。
- (parameter-type, ...)
- プロシージャーのパラメーターを識別します。
非修飾の特殊タイプ名または配列タイプ名を指定する場合、データベース・マネージャーはその特殊タイプまたは配列タイプのスキーマ名を解決するための SQL パスを検索します。
長さ属性、精度属性、あるいは位取り属性があるデータ・タイプの場合、以下のいずれかを使用します。
- 空の括弧は、データベース・マネージャーがデータ・タイプの一致の判別に際して属性を無視することを示します。例えば、DEC() は、DEC(7,2) のデータ・タイプで定義されたプロシージャーのパラメーターに一致するものとみなされます。 ただし、FLOAT に空の括弧を指定することはできません。これは、そのパラメーター値が特定のデータ・タイプ (REAL または DOUBLE) を示しているからです。
- 長さ属性、精度属性、あるいは位取り属性に特定の値を指定する場合、その値は、 CREATE PROCEDURE ステートメントの中で暗黙的または明示的に指定された値と正確に一致している必要があります。 データ・タイプが FLOAT の場合、 突き合わせはデータ・タイプ (REAL または DOUBLE) に基づいて行われるので、 精度は指定された値に厳密に一致している必要はありません。
- 長さ属性、精度属性、または位取り属性が明示的に指定されておらず、空の括弧も指定されていない場合、該当のデータ・タイプのデフォルト属性が暗黙指定されます。暗黙の長さは、CREATE PROCEDURE ステートメントの中で暗黙的または明示的 に指定された値と正確に一致している必要があります。
FOR DATA 文節または CCSID 文節の指定はオプショナルです。 いずれの文節も指定しないと、データ・タイプが一致するかどうかを判定する場合に、データベース・マネージャーが属性を無視することを示します。 どちらか一方の文節を指定する場合は、CREATE PROCEDURE ステートメントに 暗黙的または明示的に指定されている値と一致させる必要があります。
- AS LOCATOR
- プロシージャーが、このパラメーターのロケーターを受け取るように定義されることを示します。 AS LOCATOR を指定する場合は、データ・タイプは LOB または XML、あるいは LOB または XML に基づく特殊タイプでなければなりません。
- SPECIFIC PROCEDURE specific-name
- プロシージャーを特定名によって識別します。 特定名 は、現行サーバーに存在してい る特定のプロシージャーを識別していなければなりません。
- TO
- 特権を認可するユーザーを指定します。
- USER
- authorization-name がユーザー・プロファイルであることを指定します。USER が指定される場合、authorization-name はグループ・プロファイルであってはなりません。
- GROUP
- authorization-name がグループ・プロファイルであることを指定します。GROUP が指定される場合、authorization-name は ユーザー・プロファイルであってはなりません。
- authorization-name,…
- 1 つ以上の権限 ID をリストします。
- PUBLIC
- ユーザー (権限 ID) の集合に対して特権を認可します。詳しくは、権限、特権、およびオブジェクト所有権を参照してください。
- WITH GRANT OPTION
- 指定した権限名 が、ON 文節で指定されている関数またはプロシージャーに対する特権を他のユーザーに認可できるようにします。
WITH GRANT OPTION の指定がない場合は、指定した権限名 は、ON 文節で指定されている関数またはプロシージャーに対する特権を別のユーザーに認可することができません。ただし、指定した権限名が、他の何らかの方法で認可できる権限を入手した場合 (例えば、*OBJMGT システム権限の認可) を除きます。
注
対応するシステム権限: SQL または外部関数か 外部プロシージャーに認可された特権は、その関連の プログラム (*PGM) オブジェクトまたはサービス・プログラム (*SRVPGM) オ ブジェクトに認可されます。 Java 外部関数またはプロシージャーに認可された特権は、 関連のクラス・ファイルまたは jar ファイルに対して認可されます。 認可の実行時に関連プログラム、サービス・プログラム、クラス・ファイル、 または jar ファイルが見つからない場合、エラーが戻されます。
GRANT および REVOKE ステートメントは、SQL オブジェクトに対するシステ ム権限の割り当ておよび除去を行います。 次の表は、SQL 特権に対応するシステム権限を示しています。
SQL の特権 | 関数またはプロシージャーに対する認可や取り消しに対応する システム権限 |
---|---|
ALL (ALL の認可または取り消しは、ステートメントの権限 ID が持つ特権の みを認可または取り消します。) | *OBJALTER |
ALTER | *OBJALTER |
EXECUTE | *EXECUTE |
WITH GRANT OPTION | *OBJMGT |
SQL の特権 | Java 関数またはプロシージャーに対する認可や取り消しに対応するデータ権限 | Java 関数またはプロシージャーに対する認可や取り消しに対応するオブジェクト権限 |
---|---|---|
ALL (ALL の認可または取り消しは、ステートメントの権限 ID が持つ特権の みを認可または取り消します。) | *RWX | *OBJEXIST |
ALTER | *R | *OBJALTER |
EXECUTE | *RX | *EXECUTE |
WITH GRANT OPTION | *RWX | *OBJMGT |
関数またはプロシージャーへの権限を検査する際の対応するシステム権限: 次の表は、 関数またはプロシージャーへの権限を検査する際の、SQL 特権に対応するシステム権限を示しています。 左側の欄は、SQL 特権をリストしています。 右側の欄は、同等のシステム権限をリストしています。
SQL の特権 | 対応するシステム権限 |
---|---|
ALTER | *OBJALTER |
EXECUTE | *EXECUTE および *OBJOPR |
SQL の特権 | Java 関数またはプロシージャーへの特権を検査する際の、 対応するデータ権限 | Java 関数またはプロシージャーへの特権を検査する際の、 対応するオブジェクト権限 |
---|---|---|
ALTER | *R | *OBJALTER |
EXECUTE | *RX | *EXECUTE |
組み込み関数: 組み込み関数に関する特権を付与することはできません。
代替構文: 以下のキーワードは、旧リリースとの互換性を維持するためにサポートされている同義語です。 これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。
- EXECUTE の同義語としてキーワード RUN を使用することができます。
例
プロシージャー PROCA に関する EXECUTE 特権を、PUBLIC に対して認可します。
GRANT EXECUTE
ON PROCEDURE PROCA
TO PUBLIC