追溯oracle数据库内业务用户密码被修改异常操作
2018-02-16 19:36
471 查看
[b]问题情况描述:[/b]客户提出业务不能响应,用户名原密码登录报错,怀疑密码被人为修改
环境接受:操作系统:AIX 5.3
数据库版本:9.2
数据库配置:RAC
数据文件格式:裸设备
处理过程:因为数据库开启了归档,所有数据库的历史操作都可以通过挖掘归档日志进行追溯,挖掘工具为oracle自带的logminer。如果修改了用户名密码,会将其命令转化为对数据字典的dml操作。
1.使用sys用户查看数据库是否存在logminer的程序包
SQL>desc dbms_logmnr
⚠️如果不存在,则需要运行脚本安装:SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2.根据客户提供的上次被修改的时间点,查看产生的归档日志文件有哪些:
>select inst_id,name,to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),to_char(next_time,'yyyy-mm-dd hh24:mi:ss'),sequence# from gv$arhcived_log where first_time>=to_data('2018-2-2 00:00:00 yyyy-mm-dd hh24:mi:ss') and first_time<=to_data('2018-2-3 00:00:00 yyyy_mm_dd hh24:mi:ss') order by 3 desc;
省略查询结果。。。。。。
由于是双节点RAC,不确定在其中哪个节点进行,需要把两个节点的归档从带库restore出来查看:
run{
allocate channel t1 device type 'set_tape';
restore archivelog sequence# 对应时间发生时最近的一次归档 thread 1;
restore archivelog sequence# 对应时间发生时最近的一次归档 thread 2;
release channel t1;
}
3.利用logminer进行日志挖掘:
3.1首次加入归档日志:
execute dbms_logmnr.add_logfile(logfilename=>'步骤2 restore回来的归档日志路径',option=>dbms_logmnr.new);
3.2开始利用当前数据字典进行日志挖掘
dbms_logmnr.start_logmnr(option=>dbms_logmnr.dict_from_online_catalog);
4.挖掘语句执行结束后,日志信息被保存在v$logmnr_contents视图中,并对其他用户不可见。检查对user$ 进行修改的所有条目:
select * from v$logmnr_contents where seg_name='USER$';
在实例1中的归档日志中未发现此类操作,使用如下命令停止日志挖掘:
execute dbms_logmnr.end_logmnr();
按上述步骤继续挖掘实例2的归档,发现异常操作
5.使用如下sql查看详细时间
SQL>select to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') from v$logmnr_contents where seg_name='USER$';
查询结果与客户回忆的时间相吻合,
⚠️col session_info for 99 "加长显示操作"
且根据上步骤中的监听日志,按主机名过滤条件,在实例二的监听日志里查找对应的登录记录,进一步查询问题原因
环境接受:操作系统:AIX 5.3
数据库版本:9.2
数据库配置:RAC
数据文件格式:裸设备
处理过程:因为数据库开启了归档,所有数据库的历史操作都可以通过挖掘归档日志进行追溯,挖掘工具为oracle自带的logminer。如果修改了用户名密码,会将其命令转化为对数据字典的dml操作。
1.使用sys用户查看数据库是否存在logminer的程序包
SQL>desc dbms_logmnr
⚠️如果不存在,则需要运行脚本安装:SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2.根据客户提供的上次被修改的时间点,查看产生的归档日志文件有哪些:
>select inst_id,name,to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),to_char(next_time,'yyyy-mm-dd hh24:mi:ss'),sequence# from gv$arhcived_log where first_time>=to_data('2018-2-2 00:00:00 yyyy-mm-dd hh24:mi:ss') and first_time<=to_data('2018-2-3 00:00:00 yyyy_mm_dd hh24:mi:ss') order by 3 desc;
省略查询结果。。。。。。
由于是双节点RAC,不确定在其中哪个节点进行,需要把两个节点的归档从带库restore出来查看:
run{
allocate channel t1 device type 'set_tape';
restore archivelog sequence# 对应时间发生时最近的一次归档 thread 1;
restore archivelog sequence# 对应时间发生时最近的一次归档 thread 2;
release channel t1;
}
3.利用logminer进行日志挖掘:
3.1首次加入归档日志:
execute dbms_logmnr.add_logfile(logfilename=>'步骤2 restore回来的归档日志路径',option=>dbms_logmnr.new);
3.2开始利用当前数据字典进行日志挖掘
dbms_logmnr.start_logmnr(option=>dbms_logmnr.dict_from_online_catalog);
4.挖掘语句执行结束后,日志信息被保存在v$logmnr_contents视图中,并对其他用户不可见。检查对user$ 进行修改的所有条目:
select * from v$logmnr_contents where seg_name='USER$';
在实例1中的归档日志中未发现此类操作,使用如下命令停止日志挖掘:
execute dbms_logmnr.end_logmnr();
按上述步骤继续挖掘实例2的归档,发现异常操作
5.使用如下sql查看详细时间
SQL>select to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') from v$logmnr_contents where seg_name='USER$';
查询结果与客户回忆的时间相吻合,
⚠️col session_info for 99 "加长显示操作"
且根据上步骤中的监听日志,按主机名过滤条件,在实例二的监听日志里查找对应的登录记录,进一步查询问题原因
相关文章推荐
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- Oracle操作(解锁用户,修改密码,无密码登录,创建表空间,赋权)
- mysql 5个常用操作,添加用户配置对应数据库,开启远程访问,修改密码
- MySql 5.7中新建数据库,添加用户,用户授权,删除用户,修改密码等操作
- MySQL中新建用户,新建数据库,用户授权,删除用户,修改密码的相关操作
- oracle解锁数据库用户账号并修改密码
- oracle 限制用户密码输入错误次数及限制用户每隔一段时间修改密码以确保数据库安全
- 在 oracle 10数据库中, 对 scott 用户解锁,并修改其密码
- Oracle 提示修改密码 ORA-28002和ORA-28221数据库用户修改密码报错解决办法
- oracle 查看用户操作而不最终修改用户密码
- MySQL中新建用户,新建数据库,用户授权,删除用户,修改密码的相关操作
- MySQL新建用户,授权,删除用户,修改密码操作
- C#修改AD域的用户密码时报“调用的目标发生了异常”的问题。
- 修改oracle用户密码永不过期
- 修改oracle用户密码永不过期
- Oracle创建用户授权与修改用户密码
- Oracle在DOS中解锁用户、修改密码思路和具体过程
- MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
- oracle 10g默认用户名、密码解锁、修改用户密码
- 修改oracle用户密码永不过期修改