最近在處理數據庫的用戶權限問題,之前慣性思維,覺得給用戶授權RESOURCE權限之后,用戶的一般權限都會有,等到發現用戶有RESOURCE角色,卻沒有創建視圖的權限之后,才發現這部分還是一知半解啊,所以此處整理了一下相關的CONNECT角色和RESOURCE角色的內容。
一般情況下,在新建數據庫用戶后,都會習慣性的給用戶授權CONNECT角色和RESOURCE角色:
GRANT connect,resource TO 用戶;
但是擁有這兩個角色的用戶都擁有什么權限呢?可以使用如下語句查看一下:
SELECT * FROM dba_sys_privs WHERE grantee IN ('RESOURCE', 'CONNECT') ORDER BY 1;
從查詢結果可以看到:
CONNECT角色:僅具有創建SESSION的權限
RESOURCE角色:僅具有創建CLUSTER,INDEXTYPE,OPERATOR,PROCEDEURE,SEQUENCE,TABLE,TRIGGER,TYPE的權限。同時,當把ORACLE resource角色授予一個user的時候,不但會授予ORACLE resource角色本身的權限,而且還有unlimited tablespace權限,但是,當把resource授予一個role時,就不會授予unlimited tablespace權限。
確實沒有創建視圖的權限,由此看來如果需要創建視圖權限,只能單獨授權:
GRANT CREATE VIEW TO 用戶;
那么,一個用戶,如果查看他擁有什么權限呢?
方法一:PLSQL Developer工具
在PLSQL Developer中可以很方便的查看用戶的各種類型權限(包括對象權限,角色權限,系統權限),如下圖:
方法二:SQL查詢語句
查詢對象權限:
SELECT * FROM dba_tab_privs a WHERE a.grantee = '用戶名';
查詢角色權限:
SELECT * FROM dba_role_privs a WHERE a.GRANTEE = '用戶名';
查詢系統權限:
SELECT * FROM dba_sys_privs a WHERE a.GRANTEE = '用戶名';