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.
我们想知道是谁在什么时候这样做的?
有人可以给一些提示吗?
提前致谢。
如果您没有在数据库中启用审计,您通常无法发现谁以及何时查询和/或修改了数据库,至少与启用审计一样容易。
您可以对这些任务使用各种类型的审计:
使用标准审计,您可以审计对象和系统权限,例如SELECT * FROM HR.EMLOYEES
和CREATE ROLE
。审计记录可以写入数据库(默认)或数据库外的文件。您可以使用AUDIT
语句启用审计,例如,,AUDIT SELECT ON HR.EMPLOYEES
并使用NOAUDIT
语句禁用它,例如,NOAUDIT CREATE ROLE
。标准审计允许您捕获调用语句的用户名、时间戳、执行的 SQL 的文本和绑定变量。DBA_AUDIT_TRAIL
如果将审计配置为将标准审计记录存储在数据库中(这是默认设置),则可以从视图中查询标准审计记录。
使用 FGA,您可以根据审计条件对表的特定列和行进行审计,您可以在特定时间间隔(例如从下午 5 点到上午 8 点)审计操作,甚至可以审计来自特定 IP 地址的操作。您使用DBMS_FGA
PL/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 STATEMENT
和AFTER STATEMENT
触发器来审计报表上表执行,或BEFORE ROW
和AFTER ROW
审计以前和新值的列。
我想尝试的另一个工具是LogMiner。它允许您分析在线和存档的重做日志并重建在数据库中执行的确切 DML 和 DDL。在 Database Control(控制数据库的 Web 界面)中,转到 Availability 选项卡,然后单击 View and Manage Transactions)。在这里,您可以指定您感兴趣的时间范围和对象,LogMiner 将根据您指定的参数为您提供交易列表。如果您无法确定实际用户,我会尝试将事务时间与AUDIT SESSION
通常作为强制审计的一部分收集并可从DBA_AUDIT_TRAIL
视图中检索的记录相关联。
归档时间: |
|
查看次数: |
3891 次 |
最近记录: |