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.