如何记录在表oracle上执行的所有oracle select语句

时间:2017-04-03 21:17:13

标签: oracle oracleforms

我想记录在特定表oracle上执行的所有oracle select语句 和pc ip addresswindows usernamePC name

换句话说,我需要知道谁和何时阅读了一个表..

我搜索并发现此查询将返回pc ip addresswindows usernamePC name

SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
       SYS_CONTEXT ('USERENV', 'HOST'),
       SYS_CONTEXT ('userenv', 'OS_USER')
  FROM DUAL;

但我想知道当这台电脑上没有数据库时,这会返回正确的信息吗?

因为无法在select上启动触发器然后如何处理该情况?

如果有可能的解决方案,我正在使用oracle表单6i应用程序

1 个答案:

答案 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

Individually Auditing SQL Statements