EXAMPLE ) 有時候我們不希望使用者利用ODBC來連接上資料庫
利用ACCESS或者EXCEL來抓資料庫資料
在道德勸說無效下
就直接擋下來!
BEGIN
FOR rec in (select username
program
SYS_CONTEXT(
USERENV
IP_ADDRESS
) ip from v$session
where audsid = userenv(
sessionid
)) loop
IF rec
IP = ?
AND rec
USERNAME =
HR
AND upper(rec
program) in
(
MSACCESS
EXE
SQLPLUSW
EXE
JREW
EXE
MSEXCEL
EXE
)
THEN
EXIT
ELSIF upper(rec
program) in (
MSACCESS
EXE
SQLPLUSW
EXE
JREW
EXE
MSEXCEL
EXE
) 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 (
USERENV
IP_ADDRESS
)
USERNAME INTO IP
UNAME 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/17838.html