using audit in oracle database 11g

本文详细介绍了如何通过SQL Trace和Oracle审计功能跟踪并记录应用系统在数据库层面的DML操作,包括设置、操作步骤及分析方法。同时,对比了两者在实际应用中的优势与局限,为数据库操作监控提供了实用指南。

由于要模拟系统操作,从数据库层面直接插入数据,于是跟踪应用系统的某个操作会在数据库层面产生那些dml语句。

 

1、一开始使用的是sql_trace ,发现sql trace 只跟踪select语句,由于要往db里面插入数据,因此就必须查询出所有的dml操作,一下是sql trace的具体操作

 

SQL> select sid,serial#,username ,osuser,machine,status from v$session where username='BBC_PUB' order by osuser;

 

    SID    SERIAL# USERNAME        OSUSER       MACHINE            STATUS
---------- ---------- ------------------------------ ------------------------------ ---------------------------------------------------------------- --------

    1752     2 BBC_PUB        weblogic       abc            INACTIVE
       615    16 BBC_PUB        weblogic      abc            INACTIVE

>在session层面启用sql trace

exec dbms_system.set_sql_trace_in_session(615,16,true)
exec dbms_system.set_sql_trace_in_session(1752,2,true)

>查找该session所对应的操作系统进程,该spid就是生成的trace文件的后缀

select s.sid,s.serial#,s.username,p.spid   
from v$session s,v$process p
where s.paddr=p.ADDR
and s.username='BBC_PUB' order by s.osuser;

>使用oracle自带工具tkprof进行分析

/oracle/app/product/11.2.0/db_1/bin/tkprof /oracle/app/diag/rdbms/atgbbc/atgbbc/trace/atgbbc_ora_11237.trc
output = 3.txt

这样就可以使用文本编辑器来进行分析

>在session层面禁用sql trace

exec dbms_system.set_sql_trace_in_session(615,16,false)
exec dbms_system.set_sql_trace_in_session(1752,2,false)

 

2、在朋友的建议下,果断的放弃sql trace,于是使用oracle 审计功能,发现审计功能果然强大,在数据库层面的每个操作都能够记录下来,以下是具体的操作过程:

SQL> ALTER SYSTEM SET audit_trail=db,extended SCOPE=SPFILE;

>重启db


SQL> show parameter audit

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest        string  /oracle/app/admin/atgbbc/adump
audit_sys_operations       boolean  FALSE
audit_syslog_level       string
audit_trail        string  DB, EXTENDED
SQL>

>对用户启用审计

AUDIT ALL BY bbc_pub BY ACCESS;
AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY bbc_pub BY ACCESS;
AUDIT EXECUTE PROCEDURE BY bbc_pub BY ACCESS;

>在应用层面执行某操作后执行如下sql进行查询

 

set linesize 500
COLUMN username FORMAT A10
COLUMN owner    FORMAT A10
COLUMN obj_name FORMAT A10
COLUMN extended_timestamp FORMAT A35
col sql_bind for a20
col sql_text for a40
col os_username for a10


SELECT OS_USERNAME,
    username,
       extended_timestamp,
       owner,
       obj_name,
       action_name,
    SQL_BIND,
    SQL_TEXT
FROM   dba_audit_trail
WHERE  owner = 'BBC_PUB'
and timestamp>to_date('20121121162200','yyyymmddhh24:mi:ss')
and action_name in ('INSERT','UPDATE','DELETE') and os_username='weblogic'
and obj_name not like 'DMS_%' and  obj_name not like '%D2%'
ORDER BY timestamp;

 

>禁用审计

 

noAUDIT ALL BY bbc_pub ;
noAUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY bbc_pub ;
noAUDIT EXECUTE PROCEDURE BY bbc_pub ;

 

 

 

 

 

 

<think>好的,我现在需要帮助用户解答关于Oracle数据库中使用DBLink进行跨库查询的问题。用户明确询问了使用方法及示例,所以我得先回忆相关知识,并参考提供的引用内容来组织回答。 首先,用户提到的引用[1]和[2]都涉及DBLink的基本概念和创建方法,引用[3]则比较了MySQL的FEDERATED引擎,但用户主要关注Oracle,所以重点放在前两个引用上。我需要确保回答结构清晰,分步骤说明使用方法,并给出示例,同时可能涉及权限和注意事项。 接下来,我应该先介绍DBLink的定义和作用,引用[1]中的内容提到它允许访问其他数据库的对象,这点很重要。然后按照创建步骤展开,包括权限检查、创建语法、示例。这里需要区分公共和私有DBLink,引用[2]提到公用链接的所有者是PUBLIC,私有的是用户自己,所以需要说明两者的区别。 创建之后,用户需要知道如何使用DBLink进行查询。这里需要给出示例,比如SELECT语句,同时可以提到其他操作如INSERT、UPDATE,但用户主要问的是查询,所以重点在SELECT。同时,注意事项部分需要涵盖网络、权限、性能等方面,引用[1]和[2]中的信息可以支持这些点。 然后,根据用户的要求,生成相关问题。这些问题应该围绕DBLink的深入使用,比如如何查看已有DBLink、权限管理、替代方案等,参考引用[3]提到的FEDERATED引擎可以作为替代方案之一,但用户可能更关心Oracle内部的解决方案,比如物化视图或数据库网关。 需要注意的是,回答中要使用中文,数学公式用$...$,但可能这里用不上。代码块用正确格式,比如SQL语句。引用标识要自然添加,如创建DBLink的部分引用[^1],权限问题引用[^2]。 现在检查是否有遗漏:是否覆盖了使用方法、示例、注意事项?是否需要提到删除DBLink?用户的问题中没有明确提到,但作为完整解答,可能可以包含。不过用户主要问的是使用方法和示例,所以可能放在注意事项或相关问题上。 最后,确保回答结构清晰,步骤分明,示例正确,并且相关问题能够引导用户进一步了解。可能还需要注意权限部分,比如用户需要有CREATE DATABASE LINK权限,或者创建公共链接需要额外的权限,这点引用[2]中提到需要CREATE PUBLIC权限,所以需要明确说明。 总结回答结构: 1. DBLINK定义和作用 2. 创建步骤:权限、语法、示例(公共和私有) 3. 使用示例:查询、增删改 4. 注意事项:网络、权限、性能、命名 5. 相关问题 现在组织内容,确保每个部分都有引用支持,并且语言简洁易懂。</think>### Oracle DBLink跨库查询使用指南 #### 一、DBLink核心概念 Oracle DBLink是数据库对象间的跨实例访问桥梁,支持通过SQL语句直接操作远程数据库的表、视图等对象[^1]。其核心价值体现在: - 无需数据迁移即可实现实时数据集成 - 简化跨数据库事务处理 - 支持异构数据库连接(需配合Gateway) #### 二、DBLink创建步骤 1. **权限验证** ```sql -- 验证用户权限 SELECT * FROM USER_SYS_PRIVS WHERE PRIVILEGE LIKE '%DATABASE LINK%'; ``` 需要`CREATE DATABASE LINK`权限(私有链接)或`CREATE PUBLIC DATABASE LINK`权限(公共链接)[^2] 2. **基础创建语法** ```sql CREATE [SHARED][PUBLIC] DATABASE LINK dblink_name CONNECT TO remote_user IDENTIFIED BY password USING 'tns_entry'; ``` 3. **典型创建示例** ```sql -- 私有DBLink(当前用户专用) CREATE DATABASE LINK sales_db CONNECT TO sales_user IDENTIFIED BY pwd123 USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))'; -- 公共DBLink(所有用户可用) CREATE PUBLIC DATABASE LINK hr_link CONNECT TO hr_admin IDENTIFIED BY hrpass USING 'HRDB'; ``` #### 三、跨库查询实践 1. **基础查询** ```sql SELECT * FROM employees@hr_link WHERE department_id = 50; -- 多库关联查询 SELECT e.emp_name, d.dept_name FROM local_emp e JOIN departments@hr_link d ON e.dept_id = d.dept_id; ``` 2. **数据操作示例** ```sql -- 插入远程数据 INSERT INTO audit_log@security_db SELECT * FROM local_audit WHERE log_date > SYSDATE-1; -- 更新远程记录 UPDATE orders@sales_db SET status = 'SHIPPED' WHERE order_id = 1001; ``` #### 四、关键注意事项 1. **连接稳定性** 需确保网络可达且监听配置正确,建议通过`tnsping`验证TNS配置: ```shell tnsping HRDB ``` 2. **权限控制** 远程用户需具备对象访问权限,建议创建专用服务账户[^2] 3. **性能优化** 大数据量查询应配合`DRIVING_SITE`提示使用: ```sql SELECT /*+ DRIVING_SITE(d) */ * FROM big_table@remote_db d WHERE create_date > '2023-01-01' ``` 4. **对象命名规范** 推荐使用统一前缀如`DBL_`,避免命名冲突 #### 五、进阶管理 1. **查看现有DBLink** ```sql -- 用户级DBLink SELECT * FROM USER_DB_LINKS; -- 全库DBLink SELECT * FROM DBA_DB_LINKS; ``` 2. **删除DBLink** ```sql DROP DATABASE LINK sales_db; -- 私有链接 DROP PUBLIC DATABASE LINK hr_link; -- 公共链接 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值