2014-09-24 27 views
0

我創建默認和臨時表空間的用戶TEMP_USER之後,然後我授予用戶具有以下如何從「資源」特權排除「UNLIMITED TABLESPACE」在甲骨文

GRANT CONNECT TO TEMP_USER; 
GRANT RESOURCE TO TEMP_USER; 
GRANT CREATE ANY VIEW TO TEMP_USER; 
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TEMP_USER; 
GRANT advisor to TEMP_USER; 
GRANT administer sql tuning set to TEMP_USER; 
GRANT CREATE MATERIALIZED VIEW to TEMP_USER; 

然後,當執行

select * from session_privs; 

我得到所有這些特權給當前用戶:

CREATE SESSION 
UNLIMITED TABLESPACE 
CREATE TABLE 
CREATE CLUSTER 
CREATE ANY VIEW 
CREATE SEQUENCE 
CREATE PROCEDURE 
CREATE TRIGGER 
CREATE MATERIALIZED VIEW 
CREATE TYPE 
CREATE OPERATOR 
CREATE INDEXTYPE 
ADVISOR 
ADMINISTER SQL TUNING SET 

UNLIMITED TABLESPACE是我想讓這個用戶逃離,我知道我可以運行撤銷刪除權限,我們如何排除RESOURCE這樣的特權,以便我的用戶不能訪問其他SCHEMA上同名的表?

回答

2

這是不包括在特權列表the documentation說與RESOURCE來;並且它也沒有在DBA_SYS_PRIVS中列出。但它被授予RESOURCE,無論如何11gR2。

的文件也說:

注: Oracle建議您設計自己的數據庫安全角色,而不是依靠這個角色。此角色可能不會由將來的Oracle數據庫版本自動創建。

後來更加強烈地聲明,你不應該使用它,它將在未來的版本中被棄用。

所以答案顯然是不使用RESOURCE作用可言,但權限授予你想,而不是直接:

GRANT CONNECT TO TEMP_USER; 
-- GRANT RESOURCE TO TEMP_USER; 
GRANT CREATE CLUSTER TO TEMP_USER 
GRANT CREATE INDEXTYPE TO TEMP_USER 
GRANT CREATE OPERATOR TO TEMP_USER 
GRANT CREATE PROCEDURE TO TEMP_USER 
GRANT CREATE SEQUENCE TO TEMP_USER 
GRANT CREATE TABLE TO TEMP_USER 
GRANT CREATE TRIGGER TO TEMP_USER 
GRANT CREATE TYPE TO TEMP_USER 
GRANT CREATE ANY VIEW TO TEMP_USER; 
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TEMP_USER; 
GRANT advisor to TEMP_USER; 
GRANT administer sql tuning set to TEMP_USER; 
GRANT CREATE MATERIALIZED VIEW to TEMP_USER; 

或者創建自己的角色,權限授予的是,並授予角色給你的用戶 - 這是更易於管理的(但可能會影響存儲的PL/SQL;不應該需要從PL/SQL運行DDL)。無論哪種方式,只授予用戶真正需要的權限,這可能是RESOURCE中的子集。

但是,您說「讓我的用戶無法訪問其他SCHEMA上的同名表」。這不是什麼`UNLIMITED TABLESPACE」不,它可以讓你在任何表空間中創建對象,而無需存儲配額:

From the docs again

要允許用戶使用任何表空間無限量數據庫授予用戶系統權限UNLIMITED TABLESPACE系統權限覆蓋用戶的所有顯式表空間配額如果您稍後撤消權限,則必須明確授予個別表空間的配額您可以將此權限僅授予給用戶而不授予角色。

您可能仍然不希望用戶擁有該特權,但這隻會影響他們可以使用的存儲空間,而不會影響他們可以在其他架構中訪問的存儲空間。

CREATE ANY VIEW也看起來有點不合適,因爲它允許您在另一個模式中創建視圖;也許你只是想用CREATE VIEW