Oracle使用审计监控用户执行过的SQL语句

监控用户执行过的SQL语句,经常会使用查询V$SQL等视图,但这样查不出来多次执行相同的SQL语句,使用审计可以解决这个问题,这里采用精细审计某个用户的所有表。

用sys用户登记

创建下面的的过程

create or replace procedure auditUser(auditUser in varchar2,oper in int)

is

       policyName varchar2(2000);

       policynum varchar2(20);

       cursor tables is select object_name from dba_objects where wner=auditUser and              object_type='TABLE';

begin

       for tableName in tables loop

           begin

           policynum := 'AUDIT1_';

           policyName := concat(policynum,tableName.Object_Name);

           if per=1 then

           dbms_fga.add_policy(object_schema=>auditUser,object_name=>  tableName.Object_Name,policy_name => policyName,

           statement_types=>'select,insert,update,delete',enable=>true);

           end if;

           if per=0 then

           dbms_fga.drop_policy(object_schema=>auditUser,object_name=>tableName.Object_Name,policy_name => policyName);

           end if;

           exception

              when others then

               NULL;

           end;

       end loop;

       commit;

end;

查询建立的审计策略:

select * from DBA_AUDIT_POLICIES

入参auditUser 表示要审计的用户,oper=1表示审计用户的所有表,oper=0表示删除审计策略

审计完成之后最好删除建立的审计策略。

查询执行过的SQL语句:

select timestamp,db_user,os_user,sql_text from dba_fga_audit_trail order by timestamp desc

系统允许一段时间之后,数据量增加,查询会很慢,可删除表数据

truncate table fga_log$

时间: 2024-12-05 04:47:49

Oracle使用审计监控用户执行过的SQL语句的相关文章

ORACLE 查看有多个执行计划的SQL语句

在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一般意味着代码有问题或某些其它原因,例如,SQL语句使用绑定变量,但是绑定变量的类型或长度可能不一致会导致同一SQL出现不同执行计划. --查看数据库里面有多个执行计划的SQL语句的SQL_ID SELECT SQL_ID, COUNT(1) AS PLAN_NUM FROM V$SQL GROUP 

查询Oracle中正在执行和执行过的SQL语句_oracle

查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value 其它网友给出的正

Oracle 用户密码有效期的sql语句_oracle

废话不多说了,直接给大家写sql语句了,当然写法还有很多种,我也只是给大家分享其中的一种解决办法,有不同见解的可以留言哦. oracle的密码是存在有效期的,有时候会遇到密码到期需要重设的情况,查看当前密码有效期的语句: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; 将密码的时间限制改为无限制: ALTER PROFILE DEFAULT LIMIT P

Oracle查询最近执行过的SQL语句总结

一.查询最近执行过的SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc;   SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC;   SELECT   sql_text, las

nhibernate 获取执行过的sql语句(肯丢帮忙)

问题描述 大家帮忙,急啊我们老板要做系统日志,要求是记录用户操作执行的SQL语句,我不知道怎么获取执行过的SQL语句,请大家一定帮忙给个方案啊软件环境(asp.net+nhibernate+mysql) 解决方案 解决方案二:在程序模块中加入就行了和nhibernate没什么关系吧解决方案三:帮你顶解决方案四:nhibernate没有用过出个主意:执行sql语句的时候往日志表里查一行;嘿嘿曲线救国解决方案五:在数据层执行sql语句的地方,执行完了sql语句,顺便执行一下(insertinto日志

MySQL开启记录执行过的SQL语句方法

  这篇文章主要介绍了MySQL开启记录执行过的SQL语句方法,配置的方法很简单,本文直接给出配置示例,需要的朋友可以参考下 概述 很多时候,我们需要知道 MySQL 执行过哪些 SQL 语句,比如 MySQL 被注入后,需要知道造成什么伤害等等.只要有 SQL 语句的记录,就能知道情况并作出对策.服务器是可以开启 MySQL 的 SQL 语句记录功能,从而就能间接地检测到客户端程序的行为. 方法 开启方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/l

sql oracle-关于怎么快速执行10000条sql语句

问题描述 关于怎么快速执行10000条sql语句 由于我的数据库有几千万条数据,每一条查询都会花费0.5秒,但是10000条查询需要半个多小时,所以希望有快速一点的方法,求各位大神指点,下面是我的函数. /** * 这是一个横着的for循环,图的缩放级别是13,11*10方格,不同区域到不同区域的上车点数量 */ public static void CountListPointsOfOnetoOne() { ArrayList ListSql = new ArrayList(); double

MySQL开启记录执行过的SQL语句方法_Mysql

概述 很多时候,我们需要知道 MySQL 执行过哪些 SQL 语句,比如 MySQL 被注入后,需要知道造成什么伤害等等.只要有 SQL 语句的记录,就能知道情况并作出对策.服务器是可以开启 MySQL 的 SQL 语句记录功能,从而就能间接地检测到客户端程序的行为. 方法 开启方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/lib/mysql/sql_row.log行(日志的路径自己根据需要定义). 复制代码 代码如下: [mysqld] datad

Oracle中存储过程执行大的Sql语句时如何查看sql是否正确

  在Oracle中编写一个存储过程中,有时会用到较大的sql语句,但是通过PL/sql工具Test查看时又不能看到sql的样子,通过查看发现可以通过Oracle的物理临时表来处理, 在存储过程中添加DBMS_OUTPUT.put_line('要输出的Sql语句'); 然后在PL/sql工具中选中存储过程,右键选择Test执行,执行完成后可以通过DBMS_OUTPUT窗口查看sql结果了,很实用的