Announcement

Collapse
No announcement yet.

DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT' liefert ORA-31608

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT' liefert ORA-31608

    Hallo,
    ich habe ein Problem, für das ich in Google keine Lösung finde (nur jemanden, der dasselbe Problem hat).
    Wenn ich bei einem bestimmten User die Abfrage
    Code:
    select * from dba_sys_privs where  grantee = 'CDB1';
    durchführe, bekomme ich ein Ergebnis. Der Nutzer hat das Recht "Set Container".

    Führe ich für denselben User aber aus:
    Code:
    select DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',  'CDB1') FROM dual
    bekomme ich
    ORA-31608: Angegebenes Objekt vom Typ SYSTEM_GRANT nicht gefunden

    Wie kann das sein?

  • #2
    Ich weiß jetz nicht, was set container für ein Grant sein soll, aber vermutlich ist es kein system_grant.
    Wenn das so ist wie ich vermute, ist es außerdem
    a) eine besch.. Fehlermeldung oder Übersetzung
    b) eine etwas schwache Umsetzung der Funktion, die könnte ja einfach ein Kommentar ausgeben ala '-- keine System Privileges gegranted'
    Naja, kann man drüber streiten.

    Versuch mal object_grant statt dessen oder gewähre probehalber dem User ein System_Grant bzw. Privilege und frage noch mal Dein obiges Statement ab. Wenn es nur daran lag, dass der User keine System Grants besitzt, müsste es dann ein DDL Statement ausspucken.

    P.S.: Mit einem halbwegs komfortablen Oracle Tool kannst Du Dir auch die User Privileges direkt getrennt nach System und Object Type anzeigen lassen und den Fehler auch so nachvollziehen.
    Zuletzt editiert von defo; 15.12.2014, 20:18.
    Gruß, defo

    Comment


    • #3
      Das ist ein "System privilege", auch nachlesbar hier:
      http://docs.oracle.com/database/121/...htm#CNCPT89459
      Um diese Fehlermeldung zu vermeiden wenn keine Rechte da sind, ist eben genau die erste Abfrage auf dba_sys_privs da. Und dort wird es mir ja als System Privilege ausgegeben.
      Ich will sie nicht nur ansehen, sondern die DDL wegspeichern. Daher muss ich es mit dieser Abfrage machen, nicht mit einem Tool.

      Comment


      • #4
        Originally posted by CLL View Post
        Das ist ein "System privilege", ..
        Um diese Fehlermeldung zu vermeiden wenn keine Rechte da sind, ist eben genau die erste Abfrage auf dba_sys_privs da. Und dort wird es mir ja als System Privilege ausgegeben.
        Ich will sie nicht nur ansehen, sondern die DDL wegspeichern. Daher muss ich es mit dieser Abfrage machen, nicht mit einem Tool.
        Ok, dazu fällt mir nur ein, dass entweder der ausführende User nicht genug Rechte hat, die Datenbank (bzw. Repository) nicht richtig installiert ist oder irgendwie geschrottet wurde oder dass es ein Bug ist.

        Welche Version ist das? Mindestens 11 oder? Hab hier nur 10 grad am Start.

        P.S: Das mit der 11er Version ist Blödsinn. Hab mich vertan.
        Mit dem Wegspeichern das ist schon klar, es war nur ein Tipp zum Quercheck.

        P.S2: Ich seh grad anhand Deines Links, dass es um MultiTenant Architecture geht, eben 'container', jaja.
        Hier wäre es m.E. möglich, dass jenachdem zwischen lokalen und common Perspektiven zu unterscheiden ist.
        Hab ich noch nie mit gearbeitet. Weiß nicht, was der user cdb1 für einer ist. Local, Common?
        An der Ecke würde ich mal schauen, ob Du Regeln für Rollen und Privileges in Container DB berücksichtigt hast, bevor ich auf einen Bug tippe.
        Zuletzt editiert von defo; 17.12.2014, 10:02.
        Gruß, defo

        Comment


        • #5
          Danke! Das war die Lösung!
          Bei 12c muss man beim Sichern die Rollen-abfrage auf COMMON='NO' einschränken!

          Comment

          Working...
          X