출처  :  http://forums.oracle.com/forums/thread.jspa?threadID=471926&tstart=195



제품 : ORACLE SERVER

작성날짜 : 2002-11-07



ALTER USER를 실행한 사용자를 확인하는 방법(SYSTEM EVENT TRIGGER)
==========================================================================




PURPOSE
-------------------------------------------------------------------------------------------------

자신이나 또는 다른 user들의 password를 바꾸는 등의 alter user command를 사용한 사용자를 확인하는 방법을 알아보자.




Explanation & Example
-------------------------------------------------------------------------------------------------

1. 사용자 정보를 저장할 event table을 생성한다.

Create event table and users to store the alterations made:

SQL> connect / as sysdba;

create table event_table
(
ora_sysevent varchar2(20),
ora_login_user varchar2(30),
ora_instance_num number,
ora_database_name varchar2(50),
ora_dict_obj_name varchar2(30),
ora_dict_obj_type varchar2(20),
ora_dict_obj_owner varchar2(30),
timestamp date
)
/

create user test1 identified by test1;
grant create session, alter user to test1;
create user test2 identified by test2;
grant create session to test2;



2. SYS user에서 AFTER ALTER Client Event Trigger 를 생성한다.

Note: This step creates a trigger and it is fired whenever the user "test1"
issues ALTER command (It can be ALTER USER or ALTER TABLE)


SQL> CREATE or REPLACE TRIGGER after_alter AFTER ALTER on database
BEGIN
IF (ora_dict_obj_type='USER') THEN
insert into event_table
values (ora_sysevent,
ora_login_user,
ora_instance_num,
ora_database_name,
ora_dict_obj_name,
ora_dict_obj_type,
ora_dict_obj_owner,
sysdate);
END IF;
END;
/



3. test1 user로 접속한 후 test2 user의 password를 변경하는 작업을 실행한다.

SQL> connect test1/test1
SQL> alter user test2 identified by foo;



4. test2 user의 password가 test1 user에 의해 변경되면 그런 내용을 event_table 에서 확인할 수 있다.

Now that we have altered the "test2" user password from user "test1", the
event_table should have captured this details.
Now Login in as sys and Query on event_table:

SQL> connect / as sysdba;

SQL> select * from event_table;

ORA_SYSEVENT ORA_LOGIN_USER ORA_INSTANCE_NUM
ORA_DATABASE_NAME ORA_DICT_OBJ_NAME ORA_DICT_OBJ_TYPE ORA_DICT_OBJ_OWNER TIMESTAMP
-------------------------------------------------------------------------------------------------
ALTER TEST1 1  T901.IDC.ORACLE.COM  TEST2 USER  13-JUN-02


event_table의 내용을 조회하여 LOGIN_USER와 ALTERED USER 는 ORA_LOGIN_USER와
ORA_DICT_OBJ_NAME column을 통해 확인할 수 있다.


비슷한 방법으로 아래의 event에서 trigger를 생성하여 확인할 수 있다.

1) BEFORE DROP
2) AFTER DROP
3) BEFORE ANALYZE
4) AFTER ANALYZE
5) BEFORE DDL
6) AFTER DDL
7) BEFORE TRUNCATE
8) AFTER TRUNCATE




Related Documents
-------------------------------------------------------------------------------------------------


Oracle Application Developer's Guide
 
 


 

+ Recent posts