【实操篇】_Oracle中如何记录访问数据库的登陆信息

【引言】

来了一需求,项目组想查看一段时间内都有哪些连接访问oracle数据库,并需要记录相关信息在日志文件中。有什么方法可以搞下这个问题。今天念叨下:

文章大纲:

  1. 有哪些审计的方法?
  2. 如何实现上述审计?
  3. 审计建议

有哪些审计的方法?
上述引言的问题,说的再通俗点就是:数据库用户的登录记录,如何查看?

一般有三种方法:

  1. 使用trigger定制化用系统触发器来记录用户登录

  2. 开启库audit审计功能用oracle库本身的审记功能来记录用户的操作信息

  3. 使用logmnr进行挖取日志分析从logminner的文件中抓取出用户登录信息

如何实现上述审计?

方法一 使用trigger定制化
具体操作如下:

1. 创建表空间

CREATE TABLESPACE logInfo DATAFILE
  '/oradata/group/logInfo_01.dbf' SIZE 1G AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
/ 

2. 创建用户登录表,并制定表空间为logInfo

CREATE TABLE LOGINFO_LOG
(
   SESSION_ID                    NUMBER(8,0) NOT NULL,
   LOGIN_ON_TIME                 DATE,
   LOGIN_OFF_TIME                DATE,
   USER_IN_DB                    VARCHAR2(50),
   MACHINE                       VARCHAR2(50),
   IP_ADDRESS                    VARCHAR2(20),
   RUN_PROGRAM                   VARCHAR2(50)
)
PCTFREE 10
PCTUSED 40
MAXTRANS 255
TABLESPACE logInfo
STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING
/

3. 创建用户登录触发器

CREATE OR REPLACE TRIGGER sys.LOGIN_ON_INFO
AFTER LOGON
ON DATABASE
BEGIN
   INSERT into LOGINFO_LOG(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)

       SELECT AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program
       FROM v$session WHERE AUDSID=USERENV('SESSIONID');
END;
/

4. 创建登出信息触发器

CREATE OR REPLACE TRIGGER SYS.LOGIN_OFF_INFO
BEFORE LOGOFF
ON DATABASE
Begin
   update sys.LOGINFO_LOG set login_off_time=sysdate where session_id=USERENV('SESSIONID');
   exception when others then
       null;
END;
/

5. 查看登陆信息:

Select * from loginfo_log order by 2 desc;

另,可在$ORACLE_HOME/network/admin/sqlnet.ora 中设置访问限制:

–启动检查

tcp.validate_checking=yes

—允许访问

tcp.invited_nodes=(IP1,IP2,….)

— 拒绝访问

tcp.excluded_nodes=(IP1,IP2,……)

此外,因为应用程序中的delete、drop、update操作也需要记录,如下以drop审计进行举例,说明使用触发器如何进行用户操作的留痕。

1. 创建drop操作的用户留痕表

CREATE TABLE DROP_LOG

(

   SESSION_ID     INT NOT NULL,
   DROP_TIME      DATE,
   IP_ADDRESS     VARCHAR2 (20),
   OBJECT_OWNER   VARCHAR2 (30),
   OBJECT_NAME    VARCHAR2 (30),
   OBJECT_TYPE    VARCHAR2 (20),
   DROP_BY_USER   VARCHAR2 (30)
);

2. 创建删除表操作的触发器

CREATE OR REPLACE TRIGGER DROP_INFO
AFTER DROP ON username.schema 
BEGIN
INSERT INTO DROP_LOG
(SESSION_ID,
DROP_TIME,
IP_ADDRESS,
OBJECT_OWNER,
OBJECT_NAME,
OBJECT_TYPE,
DROP_BY_USER)
VALUES(userenv('sessionid'),
SYSDATE,
sys_context('userenv','ip_address'),
SYS.DICTIONARY_OBJ_OWNER,
SYS.DICTIONARY_OBJ_NAME,
SYS.DICTIONARY_OBJ_TYPE,
SYS.LOGIN_USER);?
end;
/

方法二 开启库audit审计记录登录功能
简单介绍下Oracle的审计功能

审计(Audit)用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在system表空间中的SYS.AUD 表 中 , 可 通 过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值