使用Oracle XE 10g。
我们有一个应用程序使用具有受限访问权限的数据库用户。因为通过反复试验找出该用户需要访问的表是非常麻烦的,所以我们正在寻找一种方法来查询Oracle数据字典以获取有关表访问的信息。
最好的是一个查询,该查询提供此用户自某个时间点访问的表的列表,最好是这是否是写入或只读访问。
这样,我们可以对具有不受限制访问权限的用户运行测试,找出它使用的表,然后将此用户设置为只能访问这些表。
我正在查看V$SEGMENT_STATISTICS
,但这不会记录访问该对象的用户。
答案 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