2017-06-14 65 views
0

我正在研究適用於Oracle的應用程序。對於某種邏輯,我需要使用指定模式從給定數據庫用戶獲取表的列表。就我而言,我有一個已經授予給定模式訪問權限的用戶。所以,當我的代碼使用給定的憑據創建連接並嘗試從下面的查詢中獲取表時,它的返回表列表。需要授予哪個權限才能訪問sys.dba_systems

SELECT * FROM dba_objects where owner ='schema' and object_type = 'TABLE'

上面的查詢與用戶有授予的所有權限 ,但是當我做了有限許可的嘗試,它拋出錯誤味精工作。

ORA-00942: table or view does not exist 
00942. 00000 - "table or view does not exist" 

對於二級用戶,從我們的代碼是創建連接已經通過下面的查詢

create user johnsmith identified by Passw0rd;; 
grant connect to johnsmith ; 
grant select any table to johnsmith ; 
grant UPDATE any table to johnsmith ; 
grant DELETE any table to johnsmith ; 
grant INSERT any table to johnsmith ; 

我應該授予用戶權限哪家有以下系統表的訪問權限授予.. 。?

  • DBA_OBJECTS
  • USER_CONSTRAINTS
  • USER_CONS_COLUMNS
  • USER_TABLES
  • all_tab_cols 並且還允許訪問dbms_metadata.get_dependent_ddl()方法

回答

2

隨着the O7_DICTIONARY_ACCESSIBILITY initialisation parameter set to false,這是默認的,那麼:

提供對其他模式中對象的訪問權限的系統權限不會讓其他用戶訪問SYS模式中的對象。例如,SELECT ANY TABLE特權允許用戶訪問其他模式中的視圖和表,但不允許他們選擇字典對象(動態性能視圖,常規視圖,包和同義詞的基表)。但是,您可以授予這些用戶明確的對象權限以訪問SYS架構中的對象。

所以,你可以授予你所需要的具體意見選擇權限:

grant select on sys.dba_objects to johnsmith; 

,並同其他意見;或者如果你需要他們有wider access to the SYS schema objects你可以給他們一個角色:

grant select_catalog_role to johnsmith; 

雖然principle of least privilege應該始終適用,所以這可能是矯枉過正,並可能暴露的東西,你不希望用戶能夠查看。

您無需授予任何東西,以便用戶能夠查詢user_*意見。如果你的意思是那些DBA等價物 - 例如dba_tables - 然後授予他們以上的dba_objects;或者他們將被包括在select_catalog_role中。但是,只需要授予實際需要的內容。

無論哪種方式,對於dbms_metadata你可以只授予權限上包太(你不能授予包個別程序的權限):

grant execute on dbms_metadata to johnsmith; 

或 - 可能再次遠遠超過實際需要,並且可能更危險的是選擇角色:

grant execute_catalog_role to johnsmith 
相關問題