ユーザまたはロールから特権を削除します。
Synopsis
REVOKE admin-privilege FROM grantee

REVOKE role FROM grantee

REVOKE [GRANT OPTION FOR] object-privilege 
     ON object-list FROM grantee [CASCADE]
引数
admin-privilege
許可されている管理者レベル特権、または管理者レベル特権のコンマで区切られたリスト。以下のうち 1 つ以上をさまざまな順序で使用してリストを構成できます :
オブジェクト定義特権 : %CREATE_METHOD、%DROP_METHOD、%CREATE_FUNCTION、%DROP_FUNCTION、%CREATE_PROCEDURE、%DROP_PROCEDURE、%CREATE_QUERY、%DROP_QUERY、%CREATE_TABLE、%ALTER_TABLE、%DROP_TABLE、%CREATE_VIEW、%ALTER_VIEW、%DROP_VIEW、%CREATE_TRIGGER、%DROP_TRIGGER
%DB_OBJECT_DEFINITION は、16 個のオブジェクト定義特権をすべて削除します。
grantee SQL システム特権、SQL オブジェクト特権、またはロールを持つ 1 人以上のユーザのリスト。有効な値は、コンマで区切られたユーザまたはロールのリスト、または "*" です。アスタリスク (*) は、現在定義されていて %All ロールを持たないすべてのユーザを指定します。
role ロールまたはコンマで区切られたロールのリストで、ユーザにより特権が無効とされるもの。
object-privilege 許可されている基本レベル特権、または基本レベル特権のコンマで区切られたリスト。%ALTER、DELETE、SELECT、INSERT、UPDATE、EXECUTE、および REFERENCES のうち 1 つ以上を使用してリストを構成できます。すべての権限を削除する場合は、引数の値として "ALL [PRIVILEGES]" または "*" のいずれかを使用します。
object-list object-privilege (複数の場合もあります) を削除する 1 つ以上のテーブルビュー、またはストアド・プロシージャのコンマで区切られたリスト。“*” を使用すると、現在のネームスペース内で非表示になっていないすべてのストアド・プロシージャから EXECUTE 特権を削除するように指定できます。
概要
REVOKE 文は、ユーザまたはロールからロールまたは特権を削除します。GRANT コマンド動作の逆を行います。特権全般の詳細は、"GRANT" コマンドを参照してください。
特権を持つユーザのみが削除できます。
指定したユーザ、ユーザのリスト、またはすべてのユーザ (* 構文の使用) からロールまたは特権を削除できます。また、別のロールからロールを削除することもできます。
ロールは、SQL の GRANT コマンドおよび REVOKE コマンド、または ^SECURITY Caché システム・セキュリティを使用して付与または削除できます。ただし、Caché システム・セキュリティでは、他のロールに対するロールの付与や削除はできず、$ROLES 特殊変数を使用してもロールに対して与えられたロールは表示されません。
REVOKE はすぐに作成および実行され、通常一度しか実行されないため、Caché では、ODBC、JDBC、またはダイナミック SQL での REVOKE にはクエリ・キャッシュは作成されません。
Caché 5.1 セキュリティ
バージョン 5.1 以降では、REVOKE は、%GRANT_ANY_PRIVILEGE、%CREATE_USER、%ALTER_USER、%DROP_USER、%CREATE_ROLE、%GRANT_ANY_ROLE、%DROP_ANY_ROLE の一般的な管理者特権はサポートされなくなりました。これらの特権の管理は、SQL を介してではなく、システム・レベルで処理されます。これらの SQL 特権は以前のバージョンの Caché で使用可能であり、既存のコード内で使用されている場合があります。このような特権のいずれかを削除しようとすると、実行はできますが、特権が削除されるのではなく、指定されたユーザからその名前のロールの削除が試みられます。同様に、%THRESHOLD を削除しようとすると、指定されたユーザからその名前のロールの削除が試みられます。
REVOKE コマンドは特権を必要とする操作です。埋め込み SQL 内で REVOKE を使用する前に、適切な特権を持つユーザとしてログインする必要があります。特権がない場合は、SQLCODE –99 エラー (特権違反) が返されます。$SYSTEM.Security.Login メソッドを使用して、以下のようにユーザに適切な特権を割り当ててください。
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )
以下の埋め込み SQL の例は、2 人のユーザと 1 つのロールを作成し、そのロールをユーザに割り当てます。その後、アスタリスク (*) 構文を使用してすべてのユーザからそのロールを削除します。ユーザがすでに存在する場合は、SQLCODE = -118 が発行されます。ロールがすでに存在する場合は、SQLCODE = -104 が発行されます。ロールの付与または削除がすでに実行されている場合は、SQLCODE は発行されません (SQLCODE = 0)。
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(CREATE USER User1 IDENTIFY BY fredpw)
   &sql(CREATE USER User2 IDENTIFY BY barneypw)
   WRITE !,"CREATE USER error code: ",SQLCODE
   &sql(CREATE ROLE workerbee)
   WRITE !,"CREATE ROLE error code: ",SQLCODE
   &sql(GRANT workerbee TO User1,User2)
   WRITE !,"GRANT role error code: ",SQLCODE
   &sql(REVOKE workerbee FROM *)
   WRITE !,"REVOKE role error code: ",SQLCODE
関連項目