Logon Trigger Example 登陸例子
2024-07-21 02:33:51
供稿:網友
EXAMPLE 1)
有時候我們不希望使用者利用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 = ?。16.64.19' 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(-20001,'Access Deny');
END IF;
END LOOP;
END;
只有HR并且由指定的IP 172.16.64.19才能使用ACCESS或者SQL*PLUS或者EXCEL連上來,其他的使用者皆無法連線。
但是,擁有DBA OR SYSDBA ROLE的權限帳號,是不會受到此限制。
EXAMPLE 2)
很多時候我們需要寫一個logon trigger來進行帳號登入的控管。在Three - tier 架構下,大部分的程式可能都是由一個固定的帳號,授與適當的權限經由AP Server連接到后端的Oracle資料庫來進行一般操作, 這個帳號的權限可能很大,而你并不希望programer利用這個帳號進入資料庫做一些測試動作,因為這樣就達不到有效權限控管的要求。可是這個AP專用的帳號及密碼可能是半公開的,你如何防止這樣的情況發生呢? 寫一個logon trigger 也許是不錯的主意。
CREATE OR REPLACE TRIGGER LOGON_DB_TRIGGER
AFTER LOGON ON DATABASE
DECLARE
IP VARCHAR2(30);
UNAME VARCHAR2(30);
BEGIN
SELECT SYS_CONTEXT ('USERENV','IP_ADDRESS'),USERNAME INTO IP,UNAME FROM V$SESSION
WHERE AUDSID=USERENV('SESSIONID');
IF IP != ?。16.64.33' AND
UNAME = 'APPLE' THEN
RAISE_APPLICATION_ERROR(-1,'CONNECTIION REFUSED');
END IF;
END;
寫好這個Trigger,只要使用者帳號為apple,且來源IP不是172.16.64.33都會被拒絕連線掉喔!!這樣是不是多了些安全管控呢?非凡注重一點,假如欲受限制的帳號權限為DBA or SYSDBA者,將不受此Trigger管制。