挑战! 工作人员的记录已被错误地删除,可能被恶意删除了,我们希望找到执行该记录的用户,他们在什么时间进行记录,还可以将数据恢复到执行该记录之前,以便我们可以比较同一数据的前后版本。
这就是删除器所做的。 他们以其他用户身份连接。
CONN SCOTT /老虎;
SELECT * FROM emp;
EMPNO ENAME职位MGR雇用SAL COMM DEPTNO
7499艾伦推销员7698 20-FEB-81 1600 300 30
7521沃德推销员7698 22-FEB-81 1250 500 30
7566琼斯经理7839 02-APR-81 2975 20
7654马丁推销员7698 28-SEP-81 1250 1400 30
7698刹车管理器7839 01-MAY-81 2850 30
7782克拉克经理7839 81年6月9日2450 10
7788斯科特分析仪7566 19-APR-87 3000 20
7839国王总统(11月17日)5000 10
7844特纳销售员7698 08-SEP-81 1500 0 30
7876亚当斯秘书7788 23-MAY-87 1100 20
7900詹姆斯文员7698 03-DEC-81 950 30
7902福特ANALYST 7566 03-DEC-81 3000 20
7934米勒秘书7782年1月23日1300 10
从EMPNO = 7499的EMP删除;
DBA安全人员在发出此查询时会发现问题。
SELECT * FROM emp; -雇员已从emp表中消失。
EMPNO ENAME职位MGR雇用SAL COMM DEPTNO
7521沃德推销员7698 22-FEB-81 1250 500 30
7566琼斯经理7839 02-APR-81 2975 20
7654马丁推销员7698 28-SEP-81 1250 1400 30
7698刹车管理器7839 01-MAY-81 2850 30
7782克拉克经理7839 81年6月9日2450 10
7788斯科特分析仪7566 19-APR-87 3000 20
7839国王总统(11月17日)5000 10
7844特纳销售员7698 08-SEP-81 1500 0 30
7876亚当斯秘书7788 23-MAY-87 1100 20
7900詹姆斯文员7698 03-DEC-81 950 30
7902福特ANALYST 7566 03-DEC-81 3000 20
7934米勒秘书7782年1月23日1300 10
鉴于数据库很长一段时间都没有重新启动,因此DBA很有可能能够收集证据,使他们能够查找发生了什么以及是否存在恶意活动。
DBA安全人员需要知道记录了哪些审核。
SELECT NAME,值来自v $ parameter WHERE NAME,如'audit%'
SQL> SELECT NAME,值FROM v $ parameter WHERE NAME LIKE'audit%';
名称
-------------------------------------------------- --------------------
值
-------------------------------------------------- --------------------
audit_sys_operations
假
audit_file_dest
E:\ ORACLE \ PRODUCT \ 10.2.0 \ ADMIN \ XP10R2JAN \ ADUMP
audit_trail
D B
正在对数据库进行审核
SQL> desc dba_audit_trail;
名称为空? 类型
----------------------------------------- --------- --------------------------
OS_USERNAME VARCHAR2(255)
用户名VARCHAR2(30)
USERHOST VARCHAR2(128)
终端VARCHAR2(255)
时间戳不是空日期
所有者VARCHAR2(30)
OBJ_NAME VARCHAR2(128)
动作非空数
ACTION_NAME VARCHAR2(27)
NEW_OWNER VARCHAR2(30)
NEW_NAME VARCHAR2(128)
OBJ_PRIVILEGE VARCHAR2(16)
SYS_PRIVILEGE VARCHAR2(40)
ADMIN_OPTION VARCHAR2(1)
格兰特·VARCHAR2(30)
AUDIT_OPTION VARCHAR2(40)
SES_ACTIONS VARCHAR2(19)
LOGOFF_TIME DATE
LOGOFF_LREAD NUMBER
LOGOFF_PREAD NUMBER
LOGOFF_LWRITE NUMBER
LOGOFF_DLOCK VARCHAR2(40)
COMMENT_TEXT VARCHAR2(4000)
SESSIONID不能为空
ENTRYID不能为空
STATEMENTID不能为空
RETURNCODE NOT NULL NUMBER
PRIV_USED VARCHAR2(40)
CLIENT_ID VARCHAR2(64)
SESSION_CPU NUMBER
分析师一直在阅读这本书,因此他们知道VIEW可能是root kitt的,因此更合理地从基础表SYS.AUD $中获取数据。
从sys.aud $中选择userid,action#,STATEMENT,OBJ $ NAME,To_Char(时间戳#,'mm / dd / yyyy hh24:mi:ss');按时间戳#asc排序;
来自数据库审核的时间表:
USERID ACTION#STATE OBJ $ NAME TIMESTAMP
斯科特101 1 04/30/2006 09:11:36
斯科特3 2 X $ NLS_PARAMETERS 04/30/2006 09:29:07
斯科特3 2 GV $ NLS_PARAMETERS 04/30/2006 09:29:07
斯科特3 2 V $ NLS_PARAMETERS 04/30/2006 09:29:07
斯科特3 2 NLS_SESSION_PARAMETERS 04/30/2006 09:29:07
斯科特3 5双2006年4月30日09:29:07
斯科特100 1 04/30/2006 09:29:41
SCOTT 3 22 OBJ $ 2006年4月30日09:31:07
斯科特3 22 USER_OBJECTS 2006年4月30日09:31:07
斯科特3 28 EMP 04/30/2006 09:32:01
斯科特3 31 EMP 04/30/2006 09:32:20
斯科特7 37 EMP 04/30/2006 09:33:28
斯科特3 46 EMP 04/30/2006 09:35:24
斯科特7 52 EMP 04/30/2006 09:37:04
斯科特7 55 EMP 04/30/2006 09:37:13
斯科特3 61 EMP 2006年4月30日09:37:28
需要手动阅读动作和声明。
SELECT * FROM AUDIT_ACTIONS;
动作7是删除操作,因此我们可以看到SCOTT已从9.3点的emp中删除。 因此,我们想在此之前闪回,因此必须获取记录的时间戳。 Oracle实际上并没有记录完整的时间表。 使用相关SCN仅每5分钟花费时间。 每5分钟添加一次新的SCN,将旧的SCN移走,以使用时间戳记将5天的滚动数字最多精确到5分钟。
SELECT To_Char(TIME_DP,'dd / mm / yyyy hh24:mi:ss'),SCN_BAS FROM SYS.SMON_SCN_TIME;
30/04/2006 10:07:00 9637921
30/04/2006 10:01:53 9637140
30/04/2006 09:56:46 9636359
30/04/2006 09:51:39 9635645
30/04/2006 09:46:31 9634864
30/04/2006 09:41:24 9634083
30/04/2006 09:36:17 9633367
30/04/2006 09:31:10 9632579
30/04/2006 09:26:03 9631772
30/04/2006 09:20:55 9631059
30/04/2006 09:15:48 9630277
30/04/2006 09:10:41 9629478
30/04/2006 09:05:34 9628692
从SELECT *从SCOTT.EMP到TIMESTAMP创建表EMPRECOVER作为选择(TO_TIMESTAMP('30 / 04/2006 09:31:10','DD-MM-YYYY:HH24:MI:SS'));
SELECT * FROM EMPRECOVER;
EMPNO ENAME职位MGR雇用SAL COMM DEPTNO
7499艾伦推销员7698 20-FEB-81 1600 300 30
7521沃德推销员7698 22-FEB-81 1250 500 30
7566琼斯经理7839 02-APR-81 2975 20
7654马丁推销员7698 28-SEP-81 1250 1400 30
7698刹车管理器7839 01-MAY-81 2850 30
7782克拉克经理7839 81年6月9日2450 10
7788斯科特分析仪7566 19-APR-87 3000 20
7839国王总统(11月17日)5000 10
7844特纳销售员7698 08-SEP-81 1500 0 30
7876亚当斯秘书7788 23-MAY-87 1100 20
7900詹姆斯文员7698 03-DEC-81 950 30
7902福特ANALYST 7566 03-DEC-81 3000 20
7934米勒秘书7782年1月23日1300 10
因此,DBA安全人员已经找到了删除,时间和用户,并恢复了数据。 做得好! ? 但是还没有完成,因为仅仅假设SCOTT是罪魁祸首是简单的,因为SCOTT必须非常笨拙才能简单地删除emp表中的对手行。 也许另一个用户冒充了SCOTT冒犯了这种恶意行为,以使他们陷入困境? 因此,下面还将从SYS.AUD $中查询审计跟踪的OS用户名和计算机终端列。
从sys.aud $中选择USERID,USERHOST,TERMINAL,SPARE1,Action#,STATEMENT,OBJ $ NAME,To_Char(timestamp#,'mm / dd / yyyy hh24:mi:ss');
此附加数据表明SCOTT来自与正常工作站不同的工作站,另外SPARE1列表明Windows用户名实际上是GEORGE而不是SCOTT。
该调查将传递给Windows和网络管理员,以验证该帐户是否也被欺诈使用。 这突出了安全人员对跨平台知识的要求。
From: https://bytes.com/topic/web-applications/insights/930821-recover-data-database