【问题标题】:Find tables accessed by user in Oracle在 Oracle 中查找用户访问的表
【发布时间】:2017-01-22 05:37:39
【问题描述】:

使用 Oracle XE 10g。

我们有一个应用程序使用具有受限访问权限的数据库用户。由于通过反复试验找出该用户需要访问哪些表非常麻烦,因此我们正在寻找一种方法来查询 Oracle 数据字典以获取有关表访问的信息。

最好的查询是给出该用户从某个时间点开始访问的表的列表,最好是写访问还是只读访问。

这样,我们可以对具有不受限制的访问权限的用户进行测试,找出它使用了哪些表,然后将该用户设置为只能访问这些表。

我正在查看V$SEGMENT_STATISTICS,但这不会记录访问该对象的用户。

【问题讨论】:

  • 如果您有足够的时间来收集数据,也许表触发器会通过在指定表中记录用户的每个语句一次访问来为您完成此操作?
  • 您可能正在寻找database audit
  • db审计仅在企业版和标准版中可用。

标签: oracle oracle10g data-dictionary


【解决方案1】:

您可以使用AUDIT 命令跟踪访问。这会产生大量数据,所以要小心。

对来自特定用户的所有语句启用审核,以捕获所有访问权限:

audit all statements by jheller;

直到下一个会话才生效。重新登录后,运行一些测试命令:

create table test1(a number);
select * from test1;
insert into test1 values(1);
delete from test1;

现在查询DBA_AUDIT_TRAIL 以查找数据。审计线索中有很多垃圾,因此需要努力缩小结果范围。

select owner, obj_name, action_name
from dba_audit_trail
where username = 'JHELLER'
    and owner = 'JHELLER'
    and timestamp > sysdate - 1
order by timestamp desc;

结果:

OWNER    OBJ_NAME  ACTION_NAME
-----    --------  --------
JHELLER  TEST1     DELETE
JHELLER  TEST1     INSERT
JHELLER  TEST1     SELECT
JHELLER  TEST1     CREATE TABLE

【讨论】:

  • 尝试该命令时出现错误。对我有用的是AUDIT ALL BY username。但是,DBA_AUDIT_TRAIL 仍然为空。我需要重新启动数据库吗?还是 XE 中没有启用此功能?
  • 该命令在当前会话中不生效。您需要退出并重新登录。
  • 我赞成它,因为它是一个很好的答案,但我不能接受它作为正确的答案,因为我已经确信这是一个 EE 功能。这可能是细粒度审计的一部分 (docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm)
猜你喜欢
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多