anu*_*pks -1 security oracle audit triggers plsql
我创建了一个包含所有可信源的主机名的表.如果连接的主机不在snif_session表中,我已经编写了一个oracle注销触发器来获取该会话执行的所有sql的详细信息.我将输出带到utl_file输出,其中包含sid,主机名,连接时间.
SQL> select * from snif_Session;
ALLOWED_HOST
--------------------------------------------------
RND1
WORKGROUP\RND1
Run Code Online (Sandbox Code Playgroud)
我被卡住的地方是用于获取该特定会话执行的所有sql的查询(我可以从v $ mystat获取sid).
这样做效果最好:
select a.sql_id
,b.sql_text
from dba_hist_active_sess_history a
,dba_hist_sqltext b
where a.sql_id=b.sql_id
Run Code Online (Sandbox Code Playgroud)
要么
select s.sid
, s.serial#
, a.sql_text
from v$session s
join v$sqlarea a
on a.hash_value = s.sql_hash_value ;
Run Code Online (Sandbox Code Playgroud)
这是我写的代码(块),我将放在触发器中.
declare
machine_id varchar2(50);
val int;
auth_terminal varchar2(50);
check_machine varchar2(1000);
mydate char(50);
osuser_1 varchar2(50);
sid_1 int;
sql_query_1 varchar2(5000);
machine_1 varchar2(50);
trace_info UTL_FILE.FILE_TYPE;
begin
select machine into check_machine
from v$session
where sid in (select distinct(sid) from v$mystat) ;
select count(*) into val
from snif_session
where allowed_host=check_machine;
if ( 1=val) then
dbms_output.put_line(check_machine|| ' dont check host' );
else
dbms_output.put_line(check_machine || ' check host' );
end if;
select osuser,sid,machine
into osuser_1,sid_1,machine_1
from v$session
where sid in (select distinct(sid) from v$mystat);
SELECT TO_char(systimestamp,'mm/dd/yyyy HH24:MI:SS') into mydate
FROM DUAL;
dbms_output.put_line(mydate || sid_1 || ' ' || osuser_1 || ' '|| machine_1);
trace_info := UTL_FILE.FOPEN('UTL_DIR', 'trace_info_file.txt', 'W');
UTL_FILE.PUTF(trace_info,mydate||' '||sid_1||' '||osuser_1||' '|| machine_1);
UTL_FILE.FCLOSE(trace_info);
EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20000, 'ERROR: Invalid PATH FOR file.');
end;
Run Code Online (Sandbox Code Playgroud)
我需要在utl_file输出中包含也由session执行的'sql查询'.
"我需要包含'sql查询'也由会话执行"
您的任何建议查询都不会为您提供会话执行的所有SQL.
V $ SESSION是一个动态的观点,所以它只是显示了在一个会议上发生的事情,现在.
DBA_HIST_ACTIVE_SESS_HISTORY是运行SQL的一系列快照.它用于性能分析,因此它基本上是一个随机的活动语句子集.此外,它是诊断和调整包的一部分:如果您使用它而不支付额外费用,您将违反许可证.
看来你真正需要的是审计线索.为什么不调查Oracle已有的功能,而不是自己动手?有跟踪DDL活动的AUDIT.有细粒度的审计来监控低级别的DML. 了解更多.
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |