alle Berechtigungen aller Tabellen in der Datenbank. Ich verwende Oracle 12c. Ich versuche, einem Benutzer alle Berechtigungen aller Tabellen zu gewähren. Und in Zukunft muss ich diesem Benutzer keine Berechtigungen hinzufügen. Ich muss dies tun. Ich möchte diesem Benutzer keine Systemtabellen gewähren. Ich habe den Befehl pl / sql geschrieben. aber es gibt Fehler.

BEGIN 2 FOR t IN (select * from dba_tables where owner not like "%SYS%" AND owner not like "%ADMIN%" AND iot_type IS NULL) 3 LOOP 4 EXECUTE IMMEDIATE "GRANT ALL PRIVILEGES ON "|| t.owner ||"." || t.table_name ||" TO GGSTEST"; 5 END LOOP; 6 END; 7 / BEGIN * ERROR at line 1: ORA-00905: missing keyword ORA-06512: at line 4 

Was ist der Fehler? danke.

Ich verwende dbms_print

GRANT ALL ON OUTLN.OL$ TO GGSTEST GRANT ALL ON OUTLN.OL$HINTS TO GGSTEST GRANT ALL ON OUTLN.OL$NODES TO GGSTEST GRANT ALL ON DBSNMP.BSLN_BASELINES TO GGSTEST GRANT ALL ON APEX_040200.WWV_FLOW_LOG_HISTORY TO GGSTEST GRANT ALL ON DBSNMP.BSLN_METRIC_DEFAULTS TO GGSTEST GRANT ALL ON XDB.XDB$ROOT_INFO TO GGSTEST GRANT ALL ON XDB.XDB$XDB_READY TO GGSTEST GRANT ALL ON XDB.XDB$CDBPORTS TO GGSTEST GRANT ALL ON XDB.XDB$IMPORT_TT_INFO TO GGSTEST GRANT ALL ON XDB.XDB$TTSET TO GGSTEST GRANT ALL ON XDB.XDB$H_INDEX TO GGSTEST GRANT ALL ON XDB.XDB$D_LINK TO GGSTEST GRANT ALL ON XDB.XDB$COLUMN_INFO TO GGSTEST GRANT ALL ON XDB.XDB$PATH_INDEX_PARAMS TO GGSTEST GRANT ALL ON XDB.X$NM7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.X$QN7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.X$PT7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.APP_USERS_AND_ROLES TO GGSTEST GRANT ALL ON XDB.APP_ROLE_MEMBERSHIP TO GGSTEST GRANT ALL ON XDB.XDB$DBFS_VIRTUAL_FOLDER TO GGSTEST BEGIN * ERROR at line 1: ORA-00905: missing keyword ORA-06512: at line 4 

Kommentare

  • Versuchen Sie, double hinzuzufügen Anführungszeichen für den Eigentümer und den Tabellennamen. SOFORT AUSFÜHREN ‚ GEWÄHRLEISTUNG FÜR ALLE PRIVILEGIEN AUF “ ‚ || t.owner || ‚ „. “ ‚ || t.table_name || ‚ “ TO GGSTEST ‚;
  • GRANT ALL ON IX.AQ $ _STREAMS_QUEUE_TABLE_L TO GGSTEST; Es ist kein Fehler. Aber pl / sql, loop; Es wird ein Fehler ausgegeben.
  • Versuchen Sie Folgendes: GRANT ALL ON IX. “ AQ $ _STREAMS_QUEUE_TABLE_L “ TO GGSTEST If ‚ funktioniert nicht, es kann etwas mit der Funktion „Erweiterte Warteschlange“ sein …
  • Was ‚ s der Typ des Objekts? Wählen Sie OBJECT_TYPE, STATUS aus dba_objects aus, wobei owner = ‚ IX ‚ und object_name = ‚ AQ $ _STREAMS_QUEUE_TABLE_L ‚
  • Ich habe es versucht ‚ hat funktioniert. Statustyp = TABELLE und Status = GÜLTIG

Antwort

GRANT ALL PRIVILEGES ON .... ist die Syntax von MySQL privs.

Sie müssen Folgendes tun:

GRANT ALL ON SCHEMA.TABLE TO USER 

Siehe der Dokumentation .

Kommentare

  • Hallo, ich habe gelehrt, dass es auch eine MySQL-Syntax ist, aber: überprüfen Dies
  • grant all privileges to USERNAME ist völlig anders und eine db-weite Sache.
  • Es gibt einen Abschnitt mit dem Titel “ Gewähren von Objektberechtigungen für eine Tabelle an einen Benutzer: Beispiel “
  • Eigentlich weiß Gott. ‚ hat keine DB zum Testen zur Hand: /
  • Es gibt den gleichen Fehler.

Antwort

Dies ist der richtige Befehl. Bisher gab es einen Fehler aufgrund der Installationstabellen von Oracle.

BEGIN FOR t IN (select * from dba_tables where owner!="GGSTEST" AND owner not like "%SYS%" AND owner not like "%ORDDATA%" AND owner not like "%ADMIN%" AND owner not like "%APEX%" AND owner not like "%XDB%" AND owner not like "%FLOW_FILES%" AND owner not like "%OE%" AND iot_type IS NULL) LOOP EXECUTE IMMEDIATE "GRANT ALL PRIVILEGES ON "|| t.owner ||"." || t.table_name ||" TO GGSTEST"; END LOOP; END; / 

Antwort

Das Problem ist darauf zurückzuführen, dass Zeichen von PL / SQL interpretiert werden, z. B. das Dollarzeichen oder das Hash-Tag. Wenn Sie doppelte Anführungszeichen hinzufügen, wird der Fehler nicht mehr angezeigt.

Grüße.

Kommentare

  • Vielleicht Hash. ‚ gibt keinen Fehler mit Dollarzeichen aus.
  • Ich schließe APEX-, XDB-, FLOW_FILES-, ORDDATA-Schemas aus und ‚ hat funktioniert.

Antwort

Ich versuche es einem Benutzer alle Berechtigungen aller Tabellen zu gewähren.

Warum?

Und in Zukunft muss ich diesem Benutzer keine Berechtigungen mehr hinzufügen.

Ja, das werden Sie.
Sobald Sie eine weitere Tabelle hinzufügen, müssen Sie den gesamten Vorgang wiederholen und müssen Sie dies für jeden einzelnen Benutzer tun. Ich würde dies vorschlagen Dies ist keine effiziente Nutzung Ihrer Zeit.

Ich muss dies tun.

Wir stimmen zu, nicht zuzustimmen.

Die große Mehrheit der Benutzer benötigt (oder möchte) nicht alle Berechtigungen für eine Tabelle. Wählen, Einfügen, Löschen und Aktualisieren ist alles, was sie benötigen und sollten gegeben werden.
Wie werden Sie Ihrem Management erklären, wie ein Produktionssystem ausgefallen ist (wie lange Sie brauchen, um es wiederherzustellen), weil ein Benutzer irgendwo beschlossen hat, eine Tabelle zu löschen , nur weil sie entdeckt haben, dass sie es könnten? Das ist nicht die Verantwortung eines Benutzers, also sollten sie überhaupt nicht die Erlaubnis dazu haben.

Informieren Sie sich über Rollen.
Gewähren Sie einer Rolle Berechtigungen auf Objektebene und gewähren Sie diese Rolle dann [vielen] Benutzern. Wenn Sie Tabellen ändern, müssen Sie nur den relevanten Rollen Berechtigungen [erneut] gewähren. Oracle kümmert sich darum, diese Berechtigungen an die relevanten Benutzer zu „kaskadieren“. Wenn Sie unterschiedliche „Berechtigungsstufen“ für verschiedene Benutzergruppen benötigen, erstellen Sie mehrere Rollen.

Kommentare

  • Obwohl dies wahre Dinge sein mögen, gibt er niemals Informationen darüber, ob sich das Schema ändert, ob es sich bei der Umgebung um Entwicklung oder Produktion handelt, und wenn es ‚ für ein persönliches Projekt oder seine Firma ist. Sie sprechen nie sein eigentliches Syntaxproblem an.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.