2016-09-14 2 views
2

Oracle XE 10g를 사용합니다.Oracle에서 사용자가 액세스하는 테이블 찾기

Google은 제한된 액세스 권한이있는 데이터베이스 사용자를 사용하는 애플리케이션을 보유하고 있습니다. 이 사용자가 액세스해야하는 테이블을 시행 착오를 통해 알아내는 것은 매우 번거롭기 때문에 테이블 액세스에 대한 정보를 Oracle 데이터 사전에 쿼리하는 방법을 찾고 있습니다.

좋은 점은이 사용자가 특정 시점 이후에 액세스 한 테이블 목록을 제공하는 것입니다.이 목록은 쓰기 또는 읽기 전용 액세스인지 확인하는 것이 좋습니다.

그런 식으로 무제한 액세스 권한이있는 사용자와 테스트를 실행하고 사용 된 테이블을 찾은 다음이 사용자가 해당 테이블에만 액세스 할 수 있도록 설정할 수 있습니다.

나는 V$SEGMENT_STATISTICS을보고 있었지만이 개체에 액세스 한 사용자는 기록하지 않습니다.

+0

당신은 어쩌면 지정된 테이블에 한 번 문마다 사용자의 액세스를 기록하여이 작업을 수행 할 테이블의 트리거 데이터를 수집 할 수있는 충분한 시간이 있다면? –

+0

[데이터베이스 감사] (http://www.oracle.com/technetwork/database/security/index-085803.html) – mustaccio

+1

db 감사는 엔터프라이즈 및 표준 버전에서만 사용할 수 있습니다. – OldProgrammer

답변

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 
+0

해당 명령을 시도 할 때 오류가 발생합니다. 나에게 맞는 것은'AUDIT ALL BY username '이다. 그러나 'DBA_AUDIT_TRAIL'은 비어 있습니다. 데이터베이스를 다시 시작해야합니까? 또는이 기능이 XE에서 활성화되어 있지 않습니까? – wvdz

+0

명령이 현재 세션에서 적용되지 않습니다. 로그 아웃 한 후 다시 로그인해야합니다. –

+0

꽤 좋은 답변이기 때문에 upvoting하겠습니다. 그러나 이것이 올바른 EE라고 확신하게 되었기 때문에 올바른 답변으로 받아 들일 수 없습니다. 이는 아마도 정밀한 감사 (https://docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm)의 일부일 것입니다. – wvdz

관련 문제