標籤:
在建立使用者之後,使用者不能幹任何事情,登入資料庫都會報ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied錯誤。這時我們就應該給使用者授權。先來瞭解Oracle的許可權管理。
一、許可權概述
Oracle資料庫是利用許可權來進行安全管理的,許可權是Oracle安全機制重要組成部分。這些許可權可以分了兩類:系統許可權和對象許可權。
系統許可權:系統許可權是指在系統級控制資料庫的存取和使用的機制,即執行某種語句SQL語句的能力,例如,啟動、停止資料庫,修改資料庫參數,串連到資料庫以及建立、刪除、更改模式對象(如表、視圖、索引、過程等)。
對象許可權:對象許可權是指在對象級控制資料庫的存取和使用的機制,即訪問其他使用者模式對象的能力。對象許可權是使用者之間的表、視圖等模式對象的相互存取許可權。比如,使用者xiaoming要查詢使用者scott中emp表的資訊,就需要獲得scott使用者的授權。
二、系統許可權管理
Oracle的系統許可權一般需要授予資料庫管理員和應用程式開發人員,資料庫管理員可以將系統許可權授予其他使用者,也可以將系統許可權從被授予使用者中收回。可以分為多種不同的類型
2.1 系統許可權的分類
1. 資料庫維護許可權。對於資料庫管理員,需要建立資料表空間、修改資料庫結構、建立使用者、修改使用者權限等進行資料庫維護的許可權。
2. 資料庫模式對象許可權。對於資料庫開發人員,只需瞭解操作資料庫對象的許可權,如建立表、建立視圖等許可權
3. ANY許可權,系統許可權中還有一種許可權是ANY,具有ANY許可權表示可以在任何使用者模式中進行操作。
2.2 系統許可權的授予
文法格式:
grant system_privilege to {public|role_name|user_name[..n]}
[with admin option]
其中,system_privilege 為系統許可權的名稱,public是Oracle中的公用使用者組,如果將許可權授予public,則意味著資料庫中所有使用者都將擁有該許可權,role_name是要授予許可權的角色名稱。user_name為要授予許可權的使用者名稱。
如果使用with admin option選項,則被授權的使用者還可以將這些系統許可權傳遞給其他使用者和角色。
例一:授予使用者xiaoming串連資料庫的許可權
建立使用者xiaoming後該使用者沒有任何許可權,登入資料庫都會報錯
使用system串連資料庫,執行語句:
grant create session to xiaoming
之後就可以使用xiaoming使用者登入資料庫了。
例二:授予使用者xiaoming在任何使用者模式下建立表和視圖的許可權。並允許使用者xiaoming將這些許可權授予給其他使用者
grant create any table,create any view
to xiaoming with admin option
2.3 系統許可權的收回
資料庫管理員或者具有向其使用者授權的許可權的使用者可以使用revoke語句將已經授予的系統許可權收回。
文法格式:
revoke system_privilege from {public|role_name|user_name[..n]}
例如,使用system使用者登入,以下語句可以收回使用者小明的create session許可權
revoke create session from xiaoming;
使用者的系統許可權被回收後,相應的傳遞許可權也同時被收回,但已經經過傳遞的並獲得許可權的使用者不受影響。例如:使用者xiaoming的許可權被回收後,xiaoming給使用者xiaohong授予的create session 沒有被回收。
三、對象許可權3.1 對象許可權的分類
Oracle方案對對象有9種許可權:select、update、delete、insert、execute(執行類型、函數、包和過程)、read(讀取資料字典中的資料)、index、peferences(產生外鍵)、alter。
3.2 對象許可權的授予
文法格式:
grant {object_privilege|ALL[privilege][column(..n)]} on [schema.]object_name to {public|role_name|user_name[..n]} [with grant option];
其中,object_privilege為對象許可權的名稱,關鍵字All表示授予該對象全部的對象許可權。還可以使用column來指定在表的某列的許可權,ON關鍵字用於指定許可權所在的對象,with grant option選項用於指定使用者可以將這些許可權授予其他使用者。
例三:將scott使用者的emp表的查詢授予給xiaoming,並允許使用者xiaoming將這許可權授予給其他使用者
使用system使用者登入,執行語句:
grant select on scott.emp to xiaoming with grant option
3.3 對象許可權的收回
文法格式:
revoke {object_privilege|ALL[privilege][column(..n)]} on [schema.]object_name to {public|role_name|user_name[..n]} [cascade constrainsts];
其中,cascade constrainsts選項表示在收回對象的時,同時刪除利用references對象許可權在該對象上定義的參照完整性條件約束。
例四:收回使用者小明查詢scott的emp表
使用system登入,執行語句:
revoke select on scott.emp from xiaoming
註:對象許可權回收後,相應的傳遞許可權也同時被收回,同時已經經過傳遞並獲得許可權的使用者的許可權也將被回收。例如,使用者xiaoming將查詢emp表的許可權給了xiaohong,當xiaoming的許可權被回收後,小紅的許可權也沒有了。
將查詢許可權給xiaohong:
回收xiaoming的查詢許可權,xiaohong的查詢許可權也被回收:
參考資料:oracle使用教程(第三版) 鄭阿奇 主編
oracle學習之許可權管理