登陸觸發器AFTER LOGON ON DATABASE對具有DBA許可權的不起作用
現在假設已經建立了一個SCOTT模式,下面來看看如何保護該模式。在Oracle 10g這個版本之前,在建立SCOTT模式後,一般都可以透過“tiger”這個眾所周知的密碼進行訪問,而且賬號也不會被鎖定。
假設需要做的是在維護SCOTT模式中資料的同時,仍然需要阻止使用者登入這個賬號。在Oracle 9i及其之後的版本中,可以透過鎖定賬號實現這一目的;這裡,則是利用一些其他的措施對這個方法進行一定的擴充套件。首先,建立資料庫登入觸發器以阻止某些使用者登入SCOTT模式:
sec_mgr@KNOX10g> CREATE OR REPLACE TRIGGER logon_check
2 AFTER LOGON ON DATABASE
3 BEGIN
4 IF (SYS_CONTEXT ('USERENV', 'SESSION_USER') = 'SCOTT')
5 THEN
6 raise_application_error (-20001,
7 'Unauthorized Login');
8 END IF;
9 END;
10 /
Trigger created.
當試圖連線SCOTT模式時,會產生如下結果:
sec_mgr@KNOX10g> conn scott/tiger
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Unauthorized Login
ORA-06512: at line 4
Warning: You are no longer connected to ORACLE.
在利用登入觸發器這個方法時,需要補充說明兩點:首先,雖然登入觸發器有助於增加一定的安全性,但登入觸發器會拒絕每一位試圖登入的使用者,從而會增加登入資料庫的連線時間。在上述的例子中,可能不會感覺到連線時間的增加,但是,如果觸發器程式碼需要查詢表或者進行內部呼叫,那麼時間的增加將會非常明顯,從而使這個措施成為不可承受的解決辦法。
當資料庫登入觸發器最初在Oracle 8i釋出時,觸發器會丟擲異常從而阻止使用者的登入,一般情況下,丟擲的異常既非使用者可以干預的,又不能合適地對其進行處理,所產生的結果就是所有的使用者都不能登入資料庫。而惟一能使使用者重新登入資料庫的方法是利用SYSDBA(外部的)建立連線,然後撤銷或禁用登入觸發器。
為了防止出現這種非故意的不能登入的情況,在Oracle 9i資料庫中作了改變:即使登入觸發器丟擲了異常,也不能阻止擁有ADMINISTER DATABASE TRIGGER系統許可權的使用者登入。這個許可權被授予了DBA角色,所以任何擁有DBA角色的使用者都可以繞過登入觸發器。可以利用以下查詢程式碼來決定誰可以避免登入觸發器丟擲異常,而查詢的結果將會列出被授予上述許可權的使用者和角色:
SELECT grantee
FROM dba_sys_privs
WHERE PRIVILEGE = 'ADMINISTER DATABASE TRIGGER';
GRANTEE
------------------------------
DBA
SYS
XDB
MDSYS
WKSYS
CTXSYS
IMP_FULL_DATABASE
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-715995/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- logon觸發器for dbaGo觸發器
- ORACLE 觸發器控制使用者登入之許可權限制Oracle觸發器
- Oracle登陸觸發器Oracle觸發器
- 登陸vCenter Server提示沒有許可權問題Server
- Linux賬號安全——使用者登陸許可權Linux
- Oracle RAC啟動CRS報錯:登陸許可權問題Oracle
- Nginx訪問控制_登陸許可權的控制(http_auth_basic_module)NginxHTTP
- Oracle檢視當前登陸使用者的許可權或者角色Oracle
- 審計資料庫登陸登出觸發器資料庫觸發器
- mysql8下建立使用者遠端登陸許可權MySql
- 使用者有connect,resource,dba角色許可權後回收dba許可權導致無UNLIMITED TABLESPACE許可權造成業務中斷MIT
- [MySQLFAQ]系列–如何利用觸發器實現賬戶許可權審計MySql觸發器
- SQL SERVER 2008 登陸失敗(SQL和windows都沒有對應的許可權)SQLServerWindows
- 審計資料庫登陸失敗觸發器資料庫觸發器
- 對定義者許可權和呼叫者許可權的理解
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- asp.net後臺管理系統-登陸模組-路由許可權控制_1ASP.NET路由
- 01【若依框架】 登入許可權框架
- 1.6.2. 許可權對應的操作
- App開發許可權APP
- AIX 的許可許可權(轉)AI
- 如何檢查某個使用者是否具有某個許可權物件上定義的某種許可權物件
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 許可權之選單許可權
- 用觸發器記錄資料庫使用者登陸資訊觸發器資料庫
- logon on database記錄登入資訊的triggerGoDatabase
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 小知識:軟體開發的許可權控制和許可權驗證
- 對不同許可權不同樣式的理解
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Oracle 登入觸發器Oracle觸發器
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- Spring boot 入門(四):整合 Shiro 實現登陸認證和許可權管理Spring Boot
- 許可權系統:一文搞懂功能許可權、資料許可權
- 系統許可權ADMINISTER DATABASE TRIGGER的作用Database
- 【問題處理】以SYSOPER許可權登入資料庫觸發ORA-01075錯誤資料庫
- Linux - 判斷檔案/目錄是否存在/具有許可權Linux
- 如何檢視oracle使用者具有的許可權和角色Oracle