查找用户在Oracle中访问的表

时间:2016-09-14 12:05:11

标签: oracle oracle10g data-dictionary

使用Oracle XE 10g。

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

最好的是一个查询,该查询提供此用户自某个时间点访问的表的列表,最好是这是否是写入或只读访问。

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

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

1 个答案:

答案 0 :(得分: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