Find who and when changed a specific value in the database

sno*_*261 1 oracle audit

We recent found some record in a table of an oracle database has been updated to another value.and it has been cause very important mistake.

我们想知道是谁在什么时候这样做的?

有人可以给一些提示吗?

提前致谢。

Yas*_*irA 6

如果您没有在数据库中启用审计,您通常无法发现谁以及何时查询和/或修改了数据库,至少与启用审计一样容易。

您可以对这些任务使用各种类型的审计

  1. 标准审核
  2. 细粒度审计 (FGA)
  3. 触发器

使用标准审计,您可以审计对象和系统权限,例如SELECT * FROM HR.EMLOYEESCREATE ROLE。审计记录可以写入数据库(默认)或数据库外的文件。您可以使用AUDIT语句启用审计,例如,,AUDIT SELECT ON HR.EMPLOYEES并使用NOAUDIT语句禁用它,例如,NOAUDIT CREATE ROLE。标准审计允许您捕获调用语句的用户名、时间戳、执行的 SQL 的文本和绑定变量。DBA_AUDIT_TRAIL如果将审计配置为将标准审计记录存储在数据库中(这是默认设置),则可以从视图中查询标准审计记录。

使用 FGA,您可以根据审计条件对表的特定列和行进行审计,您可以在特定时间间隔(例如从下午 5 点到上午 8 点)审计操作,甚至可以审计来自特定 IP 地址的操作。您使用DBMS_FGAPL/SQL 包实现 FGA 。例如,您可以使用此 FGA 策略审核SALARY对表列的查询和更新HR.EMPLOYEES

BEGIN
  DBMS_FGA.ADD_POLICY(
   object_schema      => 'HR',
   object_name        => 'EMPLOYEES',
   policy_name        => 'chk_hr_employees_salary',
   audit_column       => 'SALARY', 
   enable             =>  TRUE,
   statement_types    => 'SELECT, UPDATE',
   audit_trail        =>  DBMS_FGA.DB);
END;
/
Run Code Online (Sandbox Code Playgroud)

DBA_FGA_AUDIT_TRAIL如果策略配置为将它们存储在数据库中(audit_trail上面代码中的参数),则可以从视图中查询 FGA 审计记录。

使用触发器,您可以捕获有趣表的先前值和新值。然而,使用触发器实现的审计被 FGA 取代。审计记录插入到您专门创建的表中。至于表审计而言,你可以使用BEFORE STATEMENTAFTER STATEMENT触发器来审计报表上表执行,或BEFORE ROWAFTER ROW审计以前和新值的列。

我想尝试的另一个工具是LogMiner。它允许您分析在线和存档的重做日志并重建在数据库中执行的确切 DML 和 DDL。在 Database Control(控制数据库的 Web 界面)中,转到 Availability 选项卡,然后单击 View and Manage Transactions)。在这里,您可以指定您感兴趣的时间范围和对象,LogMiner 将根据您指定的参数为您提供交易列表。如果您无法确定实际用户,我会尝试将事务时间与AUDIT SESSION通常作为强制审计的一部分收集并可从DBA_AUDIT_TRAIL视图中检索的记录相关联。