Oracle

如何解決/調試 Oracle 權限問題

  • May 23, 2012

一個應用程序正在連接到 Oracle 來做一些事情。它不起作用,但我在應用程序本身中沒有收到任何 ORA 錯誤。我認為這是一個許可問題。所以我的問題是檢查oracle帳戶是否嘗試執行它無權執行的操作的最佳方法是什麼?這也有助於了解它嘗試執行的操作,以便我可以授予它。

另一個選項(缺少完整審計)是針對相關架構(或整個數據庫)的 servererror 觸發器。

drop table error_log;
create table error_log (error_time timestamp, username varchar(50), msg varchar(4000), stmt varchar(4000));

CREATE OR REPLACE TRIGGER servererror_trigger 
 AFTER SERVERERROR
 ON SCHEMA
declare
  sql_text ora_name_list_t;
  msg_     varchar2(2000) := null;
  stmt_    varchar2(2000) := null;
begin

 for depth in 1 .. ora_server_error_depth loop
   msg_ := msg_ || ora_server_error_msg(depth);
 end loop;

 for i in 1 .. ora_sql_txt(sql_text) loop
    stmt_ := stmt_ || sql_text(i);
 end loop;

 insert into error_log
 (error_time, username, msg, stmt)
 values 
 (current_timestamp, ora_login_user, msg_, stmt_);
end;
/

如果是針對單個架構/使用者,則需要在該使用者下創建觸發器。您還可以通過指定來擷取整個數據庫ON DATABASE的錯誤。在這種情況下,您需要創建該觸發器和我假設的 DBA 表(尚未嘗試過)。

現在幾乎所有發生的錯誤都會被觸發器記錄下來(有關不會報告的錯誤列表,請參閱手冊:http: //docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm #LNPLS1992 )

引用自:https://dba.stackexchange.com/questions/18299