我正在尝试通过从用户名中删除角色来保护Oracle中的用户帐户。我寻找的最终结果是从30天未访问架构的用户中删除特定角色。我可以找出用于轻松更改架构以删除角色的SQL,但是我遇到的麻烦是找出如何确定他们上次访问给定架构的时间。
作为一个示例,如果我们有一个名为FINANCE的架构和一个名为BOB123的用户,我想检查一下BOB123上一次访问FINANCE架构的时间。通过访问,我的意思是什么。更新,选择,删除,更改...将使BOB123以任何方式与FINANCE模式通信的任何DDL或DML。本质上,我只想检索他上次访问架构时的时间戳。
现在,我确实考虑过的一个选择是审核跟踪:https://docs.oracle.com/cd/B28359_01/network.111/b28531/auditing.htm#DBSEG98319。
我想我可以为DML设置监视,然后在用户最后一次登录时进行检查。但是我也觉得这会带来一些问题。例如,如果我要记录各种DML,则审计跟踪将迅速占用大量空间。我将不可避免地要清除它,鉴于我们数据库的大小和访问它的人数,它可能少于30天。这将使得无法检查一个人是否在30天内以某种方式使用了方案。
另一个问题是(如果我认为该查询必须经过数千行以检查某件事),它可能比我希望执行的时间长得多。另外,我觉得这不是一个优雅的解决方案。我还看到了另一个似乎与我想要的内容接近的堆栈溢出帖子:last time a table was accessed in oracle
问题在于它不引用架构,不返回用户名,并且需要我的办公室购买许可证才能使用诊断包。
是否有某种方法可以跟踪用户上次访问比上述方法更干净或更便宜的模式的时间?我唯一想到的另一件事是在架构本身中创建一个表,然后设置一个触发器来记录已登录的人员。在此方面将提供任何帮助!