grant resource,connect,alter system to xxxx; grant select any dictionary to xxxx;、 ソ、ィ、ニ、ッ、タ、オ、、。」
REATE TABLE killer_log AS SELECT * FROM V$SESSION WHERE rownum < 1; CREATE OR REPLACE PROCEDURE killer_proc ( i_sid IN NUMBER, i_serial# IN NUMBER ) IS PRAGMA AUTONOMOUS_TRANSACTION; v_csr INTEGER; v_rowctr INTEGER; v_sqlstr VARCHAR2(100); BEGIN insert into killer_log select * from sys.v_$session where sid=i_sid and serial#=i_serial#; commit; v_sqlstr := 'ALTER SYSTEM KILL SESSION ''' || TO_CHAR(i_sid) || ',' || TO_CHAR(i_serial#) || ''' immediate'; v_csr := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(v_csr, v_sqlstr, DBMS_SQL.NATIVE); v_rowctr := DBMS_SQL.EXECUTE(v_csr); DBMS_SQL.CLOSE_CURSOR(v_csr); EXCEPTION when OTHERS then dbms_output.put_line('killer_proc err'); END; / CREATE OR REPLACE TRIGGER logon_killer AFTER LOGON ON DATABASE DECLARE v_sid NUMBER; v_serial# NUMBER; v_program VARCHAR2(64); v_jobno INTEGER; BEGIN SELECT sid,serial#,program INTO v_sid, v_serial#,v_program FROM sys.v_$session WHERE audsid = ( SELECT USERENV('SESSIONID') FROM dual ); IF (upper(v_program) like 'MSACCESS.EXE%') or (upper(v_program) like 'EXCEL.EXE%') THEN DBMS_JOB.SUBMIT( job=>v_jobno, what=>'killer_proc('||v_sid||', '||v_serial#||');' ); END IF; EXCEPTION when OTHERS then dbms_output.put_line('logon_killer err'); END; /