シーン:自分自身を作成するために、表HZQユーザーは、ユーザーがHZQテーブルの許可されたユーザのリストを実行できるようにする必要が付与権限を持つことができません。
CREATE OR REPLACE TRIGGER TR_TABLE_GRANTを 前GRANT ON データベース DECLAREの v_ownerのVARCHAR(30 )。 v_table_nameのVARCHAR(30 )。 v_oper_userのVARCHAR(30 )。 BEGIN v_ownerを:= SYS.DICTIONARY_OBJ_OWNER。 v_table_name:= SYS.DICTIONARY_OBJ_NAME。 v_oper_user:= ora_login_user。 IF(v_owner = ' HZQ ' とv_oper_user ない で(' DBADMIN '、' A ' )) THEN RAISE_APPLICATION_ERROR(- 20001 、 ' 上ノー付与特権' || v_owner || ' ' || v_table_name || ' !!! ' ); END IF ; END ; /
結果は
自己创建的表不能授权 SQL > CONN hzq / hzq 接続されています。 SQL > 作成し 、テーブル T1(IDのINTを)。 表に作成しました。 SQL > 助成 選択 に hzq.t1 しbは、 付与 選択 に hzq.t1 するbの * 行でERROR 1 : ORA - 00604を:エラーが再帰的SQLので起こったレベル 1 ORA - 20001:いいえ付与権限ON HZQ.T1 !!! ORA - 06512:行で11 現在、許可されたユーザだけであるSYSのできる 注意がDBA権限を持っているDBADMIN SQL > CONN DBADMIN / 渡して 接続されています。 SQL > 付与 SELECT ONの hzq.t1をするC; グラントは...成功した 場合でも、ユーザーsysをパーミッション付与するものではありません SQL > CONN / AS SYSDBA 接続されています。 SQL > 付与 SELECT ONの hzq.t1をするB; 付与 SELECT ONの hzq.t1をしますB * ラインでERROR 1 : ORA - 00604:エラーが再帰このSQLで発生したレベル 1 ORA - 20001:いいえグラントの特権ON HZQ.T1 !!! ORA - 06512:行で11 になりましたカスケードhzq.t1に付与することがDBADMIN 、テーブルには、ユーザーがアクセス権を付与することができ、ユーザが許可hzqトリガーを付与することを可能にする SQLを> 与える SELECT オン hzq.t1をする C と 付与 オプションを、 許可が成功しました。.. SQL > 付与 SELECT 上の hzq.t1 へと 付与 オプション。 グラントは成功しました。 SQL > CONN C / C 接続されています。 SQL > 助成金は、 選択 に hzq.t1 するDBADMIN。 許可 の選択 に hzq.t1 にDBADMIN * ラインでERROR 1 : ORA - 00604:エラーが再帰的SQLのでは発生していないレベル 1 ORA - 20001:いいえ付与権限を上HZQ.T1 !!! ORA - 06512:行で11 SQL > CONN A / 接続されています。 SQL > 助成金は、選択に hzq.t1 するDBADMIN。グラントは成功しました。