EXAMPLE )
有時候我們不希望使用者利用ODBC來連接上資料庫利用ACCESS或者EXCEL來抓資料庫資料在道德勸說無效下就直接擋下來!
BEGIN
FOR rec in (select usernameprogramSYS_CONTEXT(USERENVIP_ADDRESS) ip from v$session
where audsid = userenv(sessionid)) loop
IF recIP = ? AND recUSERNAME = HR AND upper(recprogram) in
(MSACCESSEXESQLPLUSWEXEJREWEXEMSEXCELEXE)
THEN
EXIT
ELSIF upper(recprogram) in (MSACCESSEXESQLPLUSWEXEJREWEXEMSEXCELEXE) THEN
raise_application_error(Access Deny)
END IF
END LOOP
END
只有HR並且由指定的IP 才能使用ACCESS或者SQL*PLUS或者EXCEL連上來其他的使用者皆無法連線
但是擁有DBA OR SYSDBA ROLE的權限帳號是不會受到此限制
EXAMPLE )
很多時候我們需要寫一個logon trigger來進行帳號登入的控管在Three tier 架構下大部分的程式可能都是由一個固定的帳號授與適當的權限經由AP Server連接到後端的Oracle資料庫來進行一般操作 這個帳號的權限可能很大而你並不希望programer利用這個帳號進入資料庫做一些測試動作因為這樣就達不到有效權限控管的要求可是這個AP專用的帳號及密碼可能是半公開的你如何防止這樣的情況發生呢? 寫一個logon trigger 也許是不錯的主意
CREATE OR REPLACE TRIGGER LOGON_DB_TRIGGER
AFTER LOGON ON DATABASE
DECLARE
IP VARCHAR()
UNAME VARCHAR()
BEGIN
SELECT SYS_CONTEXT (USERENVIP_ADDRESS)USERNAME INTO IPUNAME FROM V$SESSION
WHERE AUDSID=USERENV(SESSIONID)
IF IP != ? AND
UNAME = APPLE THEN
RAISE_APPLICATION_ERROR(CONNECTIION REFUSED)
END IF
END
寫好這個Trigger只要使用者帳號為apple且來源IP不是都會被拒絕連線掉喔!!這樣是不是多了些安全管控呢?特別注意一點如果欲受限制的帳號權限為DBA or SYSDBA者將不受此Trigger管制
From:http://tw.wingwit.com/Article/program/Oracle/201311/17412.html