2017-06-14 11 views
0

Ich arbeite an der Anwendung, die auf Oracle funktioniert. Für irgendeine Art von Logik muss ich die Liste der Tabellen vom angegebenen Datenbankbenutzer mit dem angegebenen Schema abrufen. In meinem Fall habe ich einen Benutzer, der Zugriff auf das angegebene Schema gewährt hat. Wenn also mein Code unter Verwendung der angegebenen Anmeldeinformationen eine Verbindung herstellt und versucht, die Tabellen aus der folgenden Abfrage abzurufen, wird die Tabelle der Rückgabetabelle angezeigt.Welche Berechtigung muss gewährt werden, um auf sys.dba_systems zuzugreifen

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

Die obige Abfrage wurde die Arbeit mit Benutzer Erteilung alle Privilegien haben, aber wenn ich mit begrenzten Erlaubnis habe versucht, es wirft Fehler msg.

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

Für den sekundären Benutzer, von dem unsere Code-Verbindung zu schaffen hat Abfrage

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 ; 
durch folgende Berechtigungen erteilt

Welche Erlaubnis möchte ich Benutzer gewähren Zugriff auf die folgenden Systemtabellen zu haben .. .?

  • DBA_OBJECTS
  • USER_CONSTRAINTS
  • user_cons_columns
  • USER_TABLES
  • all_tab_cols und erlauben auch dbms_metadata.get_dependent_ddl() Methode

Antwort

2

Mit the O7_DICTIONARY_ACCESSIBILITY initialisation parameter set to false, die der Standard ist zuzugreifen, dann:

Systemberechtigungen, die den Zugriff auf Objekte in anderen Schemas ermöglichen, geben anderen Benutzern keinen Zugriff auf Objekte im SYS-Schema. Mit der Berechtigung SELECT ANY TABLE können Benutzer z. B. auf Sichten und Tabellen in anderen Schemas zugreifen, sie können jedoch keine Wörterbuchobjekte auswählen (Basistabellen für dynamische Leistungssichten, reguläre Sichten, Pakete und Synonyme). Sie können diesen Benutzern jedoch explizite Objektberechtigungen gewähren, um auf Objekte im Schema SYS zuzugreifen.

So können Sie entweder gewähren wählen Rechte auf die spezifischen Ansichten, die Sie brauchen:

grant select on sys.dba_objects to johnsmith; 

und das gleiche für andere Ansichten; oder wenn Sie sie benötigen wider access to the SYS schema objects zu haben, können Sie ihnen geben, dass mit einer Rolle:

grant select_catalog_role to johnsmith; 

obwohl die principle of least privilege sollte immer gelten, so kann dies zu viel des Guten und möglicherweise Dinge aussetzen Sie nicht wollen, dass Benutzer in der Lage sein, sehen.

Sie müssen nichts gewähren, damit der Benutzer user_* Ansichten abfragen kann. Wenn Sie die DBA-Äquivalente von diesen - z. dba_tables - dann gewähren sie wie oben für dba_objects; oder sie würden in select_catalog_role enthalten sein. Aber wieder nur gewähren, was tatsächlich benötigt wird.

So oder so, für dbms_metadata können Sie nur Privilegien gewähren auf dieses Paket zu (Sie können nicht Berechtigungen für einzelne Verfahren in einem Paket gewähren):

grant execute on dbms_metadata to johnsmith; 

oder - wieder wahrscheinlich viel mehr, als tatsächlich benötigt wird, und potenziell viel gefährlicher als die ausgewählte Rolle:

grant execute_catalog_role to johnsmith 
Verwandte Themen