指定の特権がユーザにあるかどうかを確認します。
Synopsis
%CHECKPRIV [GRANT OPTION FOR | ADMIN OPTION FOR] syspriv [,syspriv]
%CHECKPRIV [GRANT OPTION FOR] objpriv ON object
-
ユーザに、指定のタイプのシステム特権があるかどうか確認する。
-
ユーザに、指定のオブジェクトに対する指定のタイプのユーザ特権があるかどうか確認する。
ユーザに指定の特権がある場合、
%CHECKPRIV は SQLCODE 0 を返し、その特権がない場合は SQLCODE 100 を返します。
埋め込み SQL については、特権が自動的には確認されません。この場合の特権は、ODBC/JDBC、および Dynamic SQL (例えば、システム管理ポータルの
[SQL 文の実行] など) を使用して確認します。したがって、埋め込み SQL では、更新作業のように特権を必要とする操作を実行する前に、
%CHECKPRIV を呼び出しておく必要があります。
SET name="fred",age=99
SET SQLCODE=""
&sql(%CHECKPRIV UPDATE ON Sample.Person)
IF SQLCODE=100 {
WRITE !,"No UPDATE privilege"
QUIT }
ELSEIF SQLCODE > 0 {
WRITE !,"Unexpected SQL error: ",SQLCODE
QUIT }
ELSE {
WRITE !,"Proceeding with UPDATE" }
&sql(UPDATE Sample.Person SET Name=:name,Age=:age)
%CHECKPRIV はすぐに作成および実行され、通常一度しか実行されないため、Caché では、ODBC、JDBC、またはダイナミック SQL での
%CHECKPRIV にはクエリ・キャッシュは作成されません。
以下の例では、特定のテーブルに対する特定のオブジェクト特権が現在のユーザにあるかどうかを確認します。
%CHECKPRIV UPDATE ON Sample.Person
以下の例では、すべてのテーブルで 3 種類のテーブル操作を実行するシステム特権が現在のユーザにあるかどうかを確認します。
%CHECKPRIV %CREATE_TABLE,%ALTER_TABLE,%DROP_TABLE
以下の例では、16 個のオブジェクトすべての定義特権が現在のユーザにあるかどうかを確認します。返る SQLCODE 値は、16 個のオブジェクトすべてに対する特権があれば 0、1 つでも特権のないオブジェクトがあれば 100 です。
%CHECKPRIV %DB_OBJECT_DEFINITION
以下の例では、現在のユーザが、他のユーザやロールに %CREATE_TABLE 特権を付与できるかどうかを確認します。
%CHECKPRIV ADMIN OPTION FOR %CREATE_TABLE