Io uso oracle 12c. Cerco di concedere tutti i privilegi di tutte le tabelle a un utente. E in futuro non ho bisogno di aggiungere alcun privilegio a quellutente. Ho bisogno di farlo. Non voglio concedere tabelle di sistema a quellutente. Ho scritto il comando pl / sql. ma dà errore.

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 

Qual è lerrore? grazie.

Uso 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 

Commenti

  • Prova ad aggiungere il doppio cita il proprietario e il nome della tabella. ESEGUI IMMEDIATA ‘ GARANTISCE TUTTI I PRIVILEGI SU ” ‘ || t.owner || ‘ “. ” ‘ || t.table_name || ‘ ” TO GGSTEST ‘;
  • CONFERISCI TUTTO SU IX.AQ $ _STREAMS_QUEUE_TABLE_L A GGSTEST; non è un errore. Ma pl / sql, loop; dà errore.
  • quindi prova questo: GRANT ALL ON IX. ” AQ $ _STREAMS_QUEUE_TABLE_L ” TO GGSTEST ‘ non funziona, potrebbe essere qualcosa con la funzione Coda avanzata …
  • Cosa ‘ il tipo di oggetto? seleziona OBJECT_TYPE, STATUS From dba_objects where owner = ‘ IX ‘ e object_name = ‘ AQ $ _STREAMS_QUEUE_TABLE_L ‘
  • Ho provato ‘ ha funzionato. Tipo di stato = TABELLA e stato = VALIDO

Risposta

GRANT ALL PRIVILEGES ON .... è la sintassi di MySQL privs.

Devi fare:

GRANT ALL ON SCHEMA.TABLE TO USER 

Vedere la documentazione .

Commenti

  • Ciao, ho insegnato che era anche una sintassi MySQL, ma: controlla questo
  • grant all privileges to USERNAME è completamente diverso ed è una cosa a livello di database.
  • Cè una sezione intitolata ” Concessione di privilegi oggetto su una tabella a un utente: esempio ”
  • In realtà, dio lo sa. Non ‘ hai un DB a portata di mano da testare: /
  • Fornisce lo stesso errore ..

Risposta

È il comando giusto. In precedenza, dava un errore a causa delle tabelle di installazione di 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; / 

Risposta

il problema è dovuto ai caratteri interpretati da PL / SQL, come il simbolo del dollaro o il tag hash. Aggiungendo virgolette doppie, non si otterrà più lerrore.

Saluti.

Commenti

  • forse hash. ‘ t restituisce un errore con il simbolo del dollaro.
  • Escludo gli schemi APEX, XDB, FLOW_FILES, ORDDATA e ‘ ha funzionato.

Risposta

Provo per concedere tutti i privilegi di tutte le tabelle a un utente.

Perché?

E in futuro non ho bisogno di aggiungere alcun privilegio a quellutente.

Sì, lo farai.
Non appena aggiungi unaltra tabella, devi ripetere lintero processo e devi farlo per ogni Utente. Suggerirei che questo non è un uso efficiente del tuo tempo.

Devo farlo.

Accetteremo di non essere daccordo.

La vasta maggioranza degli utenti non ha bisogno (o vuole) “tutti i privilegi” su nessuna tabella; selezionare, inserire, eliminare e aggiornare è tutto ciò di cui hanno bisogno e tutto ciò che dovrebbero essere dato.
Come spiegherai alla tua direzione come è andato giù un sistema di produzione (per quanto tempo ci vuole tu per ripristinarlo) perché qualche Utente, da qualche parte, ha deciso di abbandonare una tabella , solo perché hanno scoperto che potevano? Quella “ non è responsabilità dellutente, quindi non dovrebbero avere il permesso in primo luogo.

Ulteriori informazioni sui ruoli.
Concedi i privilegi a livello di oggetto a un ruolo, quindi concedi quel ruolo a [molti] utenti. Quando modifichi le tabelle, devi solo [ri-] concedere i privilegi ai ruoli pertinenti; Oracle si occuperà della “cascata” di questi privilegi agli Utenti interessati. Se hai bisogno di diversi “livelli” di privilegio per diversi gruppi di utenti, crea più ruoli.

Commenti

  • Sebbene queste possano essere cose vere, non fornisce mai informazioni su se lo schema sta cambiando, se env è dev o production, e se ‘ è per un progetto personale o per la sua azienda. Non affronti mai il suo vero problema relativo alla sintassi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *