我想记录在特定表oracle上执行的所有oracle select语句
和pc ip address
,windows username
,PC name
换句话说,我需要知道谁和何时阅读了一个表..
我搜索并发现此查询将返回pc ip address
,windows username
,PC name
SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
SYS_CONTEXT ('USERENV', 'HOST'),
SYS_CONTEXT ('userenv', 'OS_USER')
FROM DUAL;
但我想知道当这台电脑上没有数据库时,这会返回正确的信息吗?
因为无法在select上启动触发器然后如何处理该情况?
如果有可能的解决方案,我正在使用oracle表单6i应用程序
答案 0 :(得分:2)
您可以对单个SQL DML / DDL语句使用数据库审计。
示例:
SQL> conn sys as sysdba
SQL> alter system set audit_trail=DB,EXTENDED scope=spfile;
重新启动数据库。
我有一个名为T1
的表,我想要对它发出审计SELECT
语句。
SQL> audit select on t1 by access;
Audit succeeded.
SQL> select * from t1;
no rows selected
可以从USER_AUDIT_TRAIL
视图获取审核信息。
SQL> select OS_USERNAME,USERNAME, USERHOST, SQL_TEXT, ACTION_NAME from dba_audit_trail where obj_name='T1';
OS_USERNAME USERNAME USERHOST SQL_TEXT ACTION_NAME
------------ --------- ------------ ----------------- ------------
oracle JAY myserver.js select * from t1 SELECT