Oracle 登入觸發器
CREATE OR REPLACE TRIGGER SYS.CONTROL_LOGON
AFTER LOGON
ON DATABASE
DECLARE
UIP VARCHAR2(300);
PRGRM VARCHAR2(60);
CUSER VARCHAR2(60);
MO VARCHAR2(60);
/******************************************************************************
this trigger is to monitor the control of logon
******************************************************************************/
BEGIN
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS'),USERNAME,PROGRAM,MODULE INTO UIP,CUSER,PRGRM,MO FROM V$SESSION WHERE AUDSID=USERENV('sessionid') and rownum=1;
IF CUSER IN ('EXPENSECTL') AND INSTR(UPPER(PRGRM),'TOAD')>0 AND UIP IN ('10.161.32.1','10.130.2.144','10.130.2.121','10.130.2.241','10.244.154.47','10.130.2.79','10.164.68.63','10.164.68.65','10.134.130.131','10.161.32.65','10.134.130.117') THEN
NULL;
ELSIF CUSER IN ('EXPENSECTL') AND INSTR(UPPER(PRGRM),'TOAD')>0 THEN
INSERT INTO sys.C_LOGIN_LOG_T(SELECT USERNAME,COMMAND,SCHEMANAME,PROGRAM,TERMINAL,SYS_CONTEXT('USERENV','IP_ADDRESS') IP,SYSDATE FROM V$SESSION WHERE AUDSID=USERENV('SESSIONID'));
COMMIT;
RAISE_APPLICATION_ERROR(-20001,'IP登入管控!');
END IF;
END ;
/
select
SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','ENTRYID') entryid,
SYS_CONTEXT('USERENV','ISDBA') isdba,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
SYS_CONTEXT('USERENV','DB_NAME') db_name,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol, SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,
SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type,
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data
from dual ;
CREATE OR REPLACE TRIGGER SYS.CONTROL_LOGON
AFTER LOGON ON DATABASE
DECLARE
PRGRM VARCHAR2(60);
MO VARCHAR2(60);
BEGIN
SELECT PROGRAM, MODULE INTO PRGRM, MO FROM V$SESSION WHERE AUDSID=USERENV('sessionid') and rownum=1;
IF PRGRM IN ('scanbarcode.exe', 'PALLET.exe') THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET CURSOR_SHARING=EXACT' ;
ELSIF
NULL ;
RAISE_APPLICATION_ERROR(-20001, '程式登入管控!');
END IF;
END ;
/
CREATE OR REPLACE TRIGGER SYS.CURSOR_SHARING AFTER LOGON ON DATABASE
DECLARE
UIP VARCHAR2(300);
PRGRM VARCHAR2(60);
CUSER VARCHAR2(60);
MO VARCHAR2(60);
BEGIN
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS'),USERNAME,PROGRAM,MODULE INTO UIP,CUSER,PRGRM,MO FROM V$SESSION WHERE AUDSID=USERENV('sessionid') and rownum=1;
IF INSTR(UPPER(PRGRM),'TOAD.EXE')>0 THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET CURSOR_SHARING=FORCE';
END IF;
END;
---------------------------------------------------------------------------------------
不過版本不一樣, 執行結果也有不一樣, 研究中 。
9i 中執行如下SQL
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS'),USERNAME,PROGRAM,MODULE
FROM V$SESSION WHERE AUDSID=USERENV('sessionid')
得到結果把後臺程式及其他同仁登入的程式也抓出來了:
SYS_CONTEXT('USERENV','IP_ADDRESS'),USERNAME,PROGRAM,MODULE
10.161.32.120,,oracle@imbfatp (PMON),
10.161.32.120,,oracle@imbfatp (DBW0),
10.161.32.120,,oracle@imbfatp (LGWR),
10.161.32.120,,oracle@imbfatp (CKPT),
10.161.32.120,,oracle@imbfatp (SMON),
10.161.32.120,,oracle@imbfatp (RECO),
10.161.32.120,,oracle@imbfatp (CJQ0),
10.161.32.120,,oracle@imbfatp (ARC0),
10.161.32.120,,oracle@imbfatp (ARC1),
10.161.32.120,SYS,toad.exe,TOAD 9.7.2.5
10.161.32.120,SYS,toad.exe,TOAD 9.7.2.5
10.161.32.120,SYS,toad.exe,TOAD 9.7.0.51
10.161.32.120,SYS,Toad.exe,Toad.exe
在10g 中執行同樣的語句, 只有一個結果 。
SYS_CONTEXT('USERENV','IP_ADDRESS'),USERNAME,PROGRAM,MODULE
10.161.32.120,SYS,toad.exe,TOAD 9.7.0.51
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-711607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle登陸觸發器Oracle觸發器
- ORACLE 觸發器控制使用者登入之許可權限制Oracle觸發器
- Oracle觸發器Oracle觸發器
- Oracle觸發器觸發級別Oracle觸發器
- ORACLE DDL觸發器Oracle觸發器
- Oracle之觸發器Oracle觸發器
- oracle ddl 觸發器Oracle觸發器
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- Oracle版本不同, 登入觸發器常用的語句返回值不一樣Oracle觸發器
- Oracle 11g 通過登入觸發器跟蹤會話產生trace檔案Oracle觸發器會話
- ORACLE觸發器詳解Oracle觸發器
- oracle 觸發器-表同步Oracle觸發器
- oracle 觸發器 client 事件Oracle觸發器client事件
- 登入觸發器不生效,只在alert日誌中顯示觸發器
- Oracle開發基礎-觸發器Oracle觸發器
- oracle 批量刪除觸發器Oracle觸發器
- oracle 觸發器的例項Oracle觸發器
- Oracle 觸發器 限制DDL操作Oracle觸發器
- 審計資料庫登陸登出觸發器資料庫觸發器
- Oracle 觸發器中使用遊標Oracle觸發器
- Oracle觸發器詳細介紹Oracle觸發器
- MySQL入門-- TRIGGER(觸發器)MySql觸發器
- 淺入淺出SQL Server 觸發器SQLServer觸發器
- 審計資料庫登陸失敗觸發器資料庫觸發器
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Oracle中觸發器的應用 (zt)Oracle觸發器
- oracle觸發器~ 更新多表的問題Oracle觸發器
- oracle trigger觸發器這servererrorOracle觸發器ServerError
- Oracle Instead of 觸發器的使用Oracle觸發器
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- 禁止oracle表的觸發器triggerOracle觸發器
- ORACLE 觸發器語法及例項 一Oracle觸發器
- ORACLE 觸發器語法及例項 二Oracle觸發器
- ORACLE 觸發器語法及例項 三Oracle觸發器
- oracle 觸發器 和 常用內建程式包Oracle觸發器
- Oracle觸發器死鎖問題解決Oracle觸發器
- 監控oracle的觸發器語句(轉)Oracle觸發器