即使dba role擁有 drop any table 的權限,也無法在stored procedure內 truncate SYS 的任何table. (Anonymous PL/SQL block除外), 這樣就無法實現在stored procedure內 truncate sys.aud$ .
然而, 可以透過另一個user授予create procedure & drop any table 權限,並建立一支 stored produre授權給dba專門執行 truncate sys.aud$,但因為安全考量,故需要摘除其create procedure權限,並lock此user.
其步驟如下:
1. 連線到dba專屬的帳號:
conn mydba@testdb
2. 建立空頭的user 並授予權限:
create user testaud identified by testaud default table users temporary tablespace temp;
grant create procedure,drop any table to testaud;
3. 建立清除audit log的stored procedure:
create procedure testaud.sp_clear_aud_log
is
begin
execute immediate 'truncate table sys.aud$';
end;
/
4. 摘除create procedure 權限並lock此user:
revoke create procedure from tetsaud;
alter user testaud account lock;
5. 測試此sp:
exec testaud.sp_clear_aud_log
PL/SQL procedure successfully completed
留言列表