考虑模式下的表(学生)说候选人(不是DBA):
学生
{RollNumber:VARCHAR2(10),
姓名:VARCHAR2(100),
CLass:VARCHAR2(5),
... ...
...
}
我们假设该表已包含一些有效数据。
我执行了更新查询以修改学生表的名称和类
UPDATE STUDENT SET Name = 'ASHWIN' , CLASS = 'XYZ'
WHERE ROLLNUMBER = 'AQ1212'
其次是另一个更新查询,其中我正在更新其他一些字段
UPDATE STUDENT SET Math_marks = 100 ,PHY_marks , CLASS = 'XYZ'
WHERE ROLLNUMBER = 'AQ1212'
因为我在两个不同的查询中修改了不同的列。我需要获取在上次事务中更新的列的特定列表。我很确定oracle必须在DBA可以访问的一些表日志中维护它。但我没有DBA访问权。
我需要的是在模式候选人下的最后一次交易中更新的列列表我不要拥有DBA权利
请告诉我一些方法。
注意:上面我提到了一个简单的表格。但实际上我有8-10个表,我需要对其进行审计,其中一个关键因素可以说ROLLNUMBER是所有其他表的外键。编写触发器对于所有表都是复杂的。所以,如果有其他方法可以获取相同内容,请帮助我。
答案 0 :(得分:0)
“我很确定oracle必须在DBA可以访问的一些表日志中维护它。”
实际上,不,不是默认。审计跟踪是一项非常昂贵的维护工作,因此Oracle无需开箱即用。它让我们决定审核的内容(操作,对象,粒度),然后为这些事情启用审计。
Oracle需要DBA访问才能启用内置功能,因此无论如何都可以为您排除。
审核是一个非常广泛的主题,需要考虑和配置很多事情。 Oracle文档将大部分安全手册用于审计。找到Introduction To Auditing here。为了监控特定列的更新,您所说的是细粒度审计。 Find out more。
“我有8-10个表......对所有表格来说,写入触发器会很复杂。”
不一定。触发器将彼此相似,因此您可以使用数据字典视图USER_TAB_COLUMNS构建代码生成器,以自定义一些通用的样板文本。