【问题标题】:Oracle Audit Table based on job role [closed]基于工作角色的 Oracle 审计表 [关闭]
【发布时间】:2013-04-04 23:52:07
【问题描述】:

我已经设法在 Oracle 中创建了一个审计表,当记录被更新、删除或插入到员工表中时,它会审计记录。我也这样做了,因此它仅在办公时间以外(上午 9 点至下午 5 点)进行更改时审核记录。

如果您想查看此代码,请告诉我,但我只是想知道是否也可以仅根据工作角色审核记录。在员工表中有一个工作角色列,例如这样。

 Job_role
 Director
Security Guard II
Administration Manager
Warehouse Assistant I

我只希望它审核例如保安或仓库助理所做的更改,因为这些工作角色不应该真正与员工数据库进行交互。

任何帮助表示赞赏。

谢谢

【问题讨论】:

  • 我对您的第一个问题stackoverflow.com/q/15534951/146325 发表了评论,认为只在特定时间运行的审计毫无价值。仅监控某些类型的员工的审计加剧了无价值。这也是错误的做法。如果“仓库助理”不应该与数据库表交互,为什么他们的用户帐户拥有允许他们这样做的权限?您需要重新考虑您的整个安全模型。
  • 您好,感谢您的回复,我再次同意您的看法,但我目前正在上大学,这是“我的客户”在我正在进行的项目中想要的,所以我别无选择,只能遵循他们问。
  • 是的,我经常听到。问题不仅在于您被要求构建一些毫无意义的东西,还在于您没有学习任何有关适当软件项目的有意义的东西。在现实生活中,我只会告诉客户不要再傻了,而是开始构建有用的东西。
  • 哈哈,我真希望我能做到

标签: sql database oracle audit


【解决方案1】:

您需要做的是将用户的工作描述存储在会话变量中。

为此,您使用 CREATE CONTEXT 命令声明一个命名空间。 Docs here.

然后你有an AFTER-LOGON database trigger 查询用户表并使用DBMS_SESSION.set_context() 将职位描述存储在命名空间中。 Docs here.

最后,当涉及到审计命令时,您使用SYS_CONTEXT() 读取存储的值并做出适当的决定:

if sys_context('AUDIT_INFO', 'JOB_DESCR') = 'Warehouse Assistant I'   
then
    call_your_audit_proc(.....);
end if;

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多