oracle權限分爲兩種:
- 系統權限:系統規定用戶使用數據庫的權限,允許用戶執行特定的數據庫動作,如創建表、創建索引、連接實例等。
- 對象權限:某種權限可以讓用戶對其它用戶的的表或視圖等對象進行特定操作。
(一)系統權限
oracle有哪些系統權限呢?可以通過查找系統權限字典(SYSTEM_PRIVILEGE_MAP)得到:
SELECT NAME FROM SYSTEM_PRIVILEGE_MAP
在oracle(oracle11.6g版本)中總共存在208中系統權限:
//管理任何sql調整集
ADMINISTER ANY SQL TUNING SET ADMINISTER DATABASE TRIGGER//
ADMINISTER RESOURCE MANAGER ADMINISTER SQL MANAGEMENT OBJECT
ADMINISTER SQL TUNING SET ADVISOR
ALTER ANY ASSEMBLY ALTER ANY CLUSTER
ALTER ANY CUBE ALTER ANY CUBE DIMENSION
ALTER ANY DIMENSION ALTER ANY EDITION
ALTER ANY EVALUATION CONTEXT ALTER ANY INDEX
ALTER ANY INDEXTYPE ALTER ANY LIBRARY
ALTER ANY MATERIALIZED VIEW ALTER ANY MINING MODEL
ALTER ANY OPERATOR ALTER ANY OUTLINE
ALTER ANY PROCEDURE ALTER ANY ROLE
ALTER ANY RULE ALTER ANY RULE SET
ALTER ANY SEQUENCE ALTER ANY SQL PROFILE
ALTER ANY TABLE//修改任何表 ALTER ANY TRIGGER//修改任何觸發器
ALTER ANY TYPE ALTER DATABASE
ALTER DATABASE LINK ALTER PROFILE
ALTER PUBLIC DATABASE LINK ALTER RESOURCE COST
ALTER ROLLBACK SEGMENT ALTER SESSION
ALTER SYSTEM ALTER TABLESPACE
ALTER USER ANALYZE ANY
ANALYZE ANY DICTIONARY AUDIT ANY
AUDIT SYSTEM BACKUP ANY TABLE
BECOME USER CHANGE NOTIFICATION
COMMENT ANY MINING MODEL COMMENT ANY TABLE
CREATE ANY ASSEMBLY CREATE ANY CLUSTER
CREATE ANY CONTEXT CREATE ANY CUBE
CREATE ANY CUBE BUILD PROCESS CREATE ANY CUBE DIMENSION
CREATE ANY DIMENSION CREATE ANY DIRECTORY
CREATE ANY EDITION CREATE ANY EVALUATION CONTEXT
CREATE ANY INDEX CREATE ANY INDEXTYPE
CREATE ANY JOB CREATE ANY LIBRARY
CREATE ANY MATERIALIZED VIEW CREATE ANY MEASURE FOLDER
CREATE ANY MINING MODEL CREATE ANY OPERATOR
CREATE ANY OUTLINE CREATE ANY PROCEDURE
CREATE ANY RULE CREATE ANY RULE SET
CREATE ANY SEQUENCE CREATE ANY SQL PROFILE
CREATE ANY SYNONYM CREATE ANY TABLE//創建任何表
CREATE ANY TRIGGER CREATE ANY TYPE
CREATE ANY VIEW CREATE ASSEMBLY
CREATE CLUSTER CREATE CUBE
CREATE CUBE BUILD PROCESS CREATE CUBE DIMENSION
CREATE DATABASE LINK CREATE DIMENSION
CREATE EVALUATION CONTEXT CREATE EXTERNAL JOB
CREATE INDEXTYPE CREATE JOB
CREATE LIBRARY CREATE MATERIALIZED VIEW
CREATE MEASURE FOLDER CREATE MINING MODEL
CREATE OPERATOR CREATE PROCEDURE
CREATE PROFILE CREATE PUBLIC DATABASE LINK
CREATE PUBLIC SYNONYM CREATE ROLE
CREATE ROLLBACK SEGMENT CREATE RULE
CREATE RULE SET CREATE SEQUENCE
CREATE SESSION CREATE SYNONYM
CREATE TABLE//創建本方案下的表 CREATE TABLESPACE
CREATE TRIGGER CREATE TYPE
CREATE USER CREATE VIEW
DEBUG ANY PROCEDURE DEBUG CONNECT SESSION
DELETE ANY CUBE DIMENSION DELETE ANY MEASURE FOLDER
DELETE ANY TABLE DEQUEUE ANY QUEUE
DROP ANY ASSEMBLY DROP ANY CLUSTER
DROP ANY CONTEXT DROP ANY CUBE
DROP ANY CUBE BUILD PROCESS DROP ANY CUBE DIMENSION
DROP ANY DIMENSION DROP ANY DIRECTORY
DROP ANY EDITION DROP ANY EVALUATION CONTEXT
DROP ANY INDEX DROP ANY INDEXTYPE
DROP ANY LIBRARY DROP ANY MATERIALIZED VIEW
DROP ANY MEASURE FOLDER DROP ANY MINING MODEL
DROP ANY OPERATOR DROP ANY OUTLINE
DROP ANY PROCEDURE DROP ANY ROLE
DROP ANY RULE DROP ANY RULE SET
DROP ANY SEQUENCE DROP ANY SQL PROFILE
DROP ANY SYNONYM DROP ANY TABLE
DROP ANY TRIGGER DROP ANY TYPE
DROP ANY VIEW DROP PROFILE
DROP PUBLIC DATABASE LINK DROP PUBLIC SYNONYM
DROP ROLLBACK SEGMENT DROP TABLESPACE
DROP USER ENQUEUE ANY QUEUE
EXECUTE ANY ASSEMBLY//執行任何裝配 EXECUTE ANY CLASS
EXECUTE ANY EVALUATION CONTEXT EXECUTE ANY INDEXTYPE
EXECUTE ANY LIBRARY EXECUTE ANY OPERATOR
EXECUTE ANY PROCEDURE EXECUTE ANY PROGRAM
EXECUTE ANY RULE EXECUTE ANY RULE SET
EXECUTE ANY TYPE EXECUTE ASSEMBLY
EXEMPT ACCESS POLICY EXEMPT IDENTITY POLICY
EXPORT FULL DATABASE FLASHBACK ANY TABLE
FLASHBACK ARCHIVE ADMINISTER FORCE ANY TRANSACTION
FORCE TRANSACTION GLOBAL QUERY REWRITE
GRANT ANY OBJECT PRIVILEGE GRANT ANY PRIVILEGE
GRANT ANY ROLE IMPORT FULL DATABASE
INSERT ANY CUBE DIMENSION INSERT ANY MEASURE FOLDER
INSERT ANY TABLE LOCK ANY TABLE
MANAGE ANY FILE GROUP MANAGE ANY QUEUE
MANAGE FILE GROUP MANAGE SCHEDULER
MANAGE TABLESPACE MERGE ANY VIEW
ON COMMIT REFRESH QUERY REWRITE
READ ANY FILE GROUP RESTRICTED SESSION
RESUMABLE SELECT ANY CUBE
SELECT ANY CUBE DIMENSION SELECT ANY DICTIONARY
SELECT ANY MINING MODEL SELECT ANY SEQUENCE
SELECT ANY TABLE SELECT ANY TRANSACTION
SYSDBA SYSOPER
UNDER ANY TABLE UNDER ANY TYPE
UNDER ANY VIEW UNLIMITED TABLESPACE
UPDATE ANY CUBE UPDATE ANY CUBE BUILD PROCESS
UPDATE ANY CUBE DIMENSION UPDATE ANY TABLE
授予用戶系統權限的語句是:
GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...]
[WITH ADMIN OPTION];
WITH ADMIN OPTION 使用戶同樣具有分配權限的權利,可將此權限授予別的用戶,另外使用該語法爲某個用戶授予系統權限,那麼對於這個被這個用戶授予相同權限的的所欲用戶來說,取消用戶的的系統權限不會級聯取消這些用戶的相同權限。
(二)對象權限
對象權限規則:
不同的對象擁有不同的權限;
對象的擁有者擁有所有權限;
對象的擁有者可以向外分配權限;
oracle中一共有8種對象權限,4個對象權限 :
對象權限 表 視圖 序列 過程
修改(alter) 有 有
刪除(delete) 有 有
執行(execute) 有
索引(index) 有
插入(insert) 有 有
關聯(references) 有 有
選擇(select) 有 有 有
更新(update) 有 有
對象授權語法:
GRANT object_priv|ALL [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
其中,
ALL:所有對象權限
PUBLIC:授給所有的用戶
WITH GRANT OPTION:允許用戶再次給其它用戶授權;
在回收對象權限時,級聯回收。
(三)角色
在實際應用中,往往是將角色賦予用戶,而不是直接將系統權限賦予用戶。角色是一組權限的集合,將角色賦給一個用戶,這個用戶就擁有了這個角色中的所有權限。oracle中預先定義了一些角色,角色與權限對應關係通過下面語句查找:
select * from role_sys_privs
oracle預先定義了9種角色:
CONNECT//連接角色
DATAPUMP_EXP_FULL_DATABASE//數據導出角色(10g開始,更高效的導出)
DATAPUMP_IMP_FULL_DATABASE//數據導入角色
DBA//管理員角色
EXP_FULL_DATABASE//數據導出角色(10g之前)
IMP_FULL_DATABASE
OLAP_DBA//OLAP管理員,和數據倉庫有關
RESOURCE//資源
SCHEDULER_ADMIN
比較常用的角色就是DBA、CONNECT和RESOURCE這三種。其中DBA擁有全部管理權限,權限比較高,一般用戶不適合設置DBA角色;CONNECT和RESOURCE角色對應的系統權限爲:
CONNECT CREATE SESSION
RESOURCE CREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
可知,對於一般用戶,我們只要賦予CONNECT和RESOURCE角色就可以了,但是若這個用戶需要創建視圖,那麼這兩個角色不行了。oracle對於這些預定義的角色主要是爲了向後兼容,用於數據庫的管理。oracle建議用戶自己設計數據管理和安全的權限規劃,而不要簡單的使用這些預定角色。
(四)toad中權限、角色管理
在實際工作中,一般我們都是藉助數據庫管理工具,很少去編寫sql腳本來完成工作。toad是Quest Software提供的一款高效的Oracle應用開發工具,可以通過圖形化的用戶界面快速訪問數據庫。在toad中創建用戶時,彈出“create user”窗口,其中有Roles、System Privileges和Object Grants這個三個選項卡,分別對應角色管理、系統權限管理和對象權限管理。
其中,Roles中有Granted、Admin和Default,System Privileges中有Granted和Admin選項,Granted與Admin選項好理解,Roles中Default選項,是什麼意思呢?查找role_sys_privs ,得到授予角色的系統權限字典內容,發現有個字段ADMIN_OPTION,這個字段的內容有的是NO,有的是YES,爲No表示授予該角色的用戶無法給別的用戶授予這一角色。因此,在toad中就出現了一個Default選項,若選中Default,則表示授予該角色的用戶根據ADMIN_OPTION字段的值來判斷該用戶能不能給其它用戶授予相同的角色,若選中Admin,則可以繼續給其它用戶授權。在實際操作中發現,授予角色時,只選中Granted,根本無法給用戶授予角色,也就是說,選中Granted後,Admin與Default,必須選擇一個。