簡體   English   中英

需要授予哪個權限才能訪問sys.dba_systems

[英]Which permission need to grant to access sys.dba_systems

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

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

上面的查詢正在與擁有所有特權的用戶一起工作,但是當我嘗試以有限的權限嘗試時,它將拋出錯誤msg。

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()方法

O7_DICTIONARY_ACCESSIBILITY初始化參數設置為false ,這是默認設置,然后:

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

因此,您可以在所需的特定視圖上授予選擇特權:

grant select on sys.dba_objects to johnsmith;

其他觀點也一樣; 或者,如果您需要他們對SYS模式對象具有更廣泛的訪問權限,則可以給他們一個角色:

grant select_catalog_role to johnsmith;

盡管最低特權原則應始終適用,所以這可能會過大,並可能暴露您不希望該用戶看到的內容。

您無需授予用戶任何權限即可查詢user_*視圖。 如果您是指那些DBA等效項(例如dba_tables ,則dba_objects上面的dba_objects授予它們; 或者將它們包含在select_catalog_role 但同樣,只授予實際需要的東西。

無論哪種方式,對於dbms_metadata您也可以僅授予該程序包特權(您不能授予該程序包中各個過程的特權):

grant execute on dbms_metadata to johnsmith;

或-可能超出實際需求,並且可能比select角色危險得多:

grant execute_catalog_role to johnsmith

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM