close


即使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

arrow
arrow
    全站熱搜

    DanBrother 發表在 痞客邦 留言(0) 人氣()