Folosesc oracle 12c. Încerc să acord toate privilegiile tuturor tabelelor unui utilizator. Și în viitor nu trebuie să adaug niciun privilegiu utilizatorului respectiv. Trebuie să fac acest lucru. Nu vreau să acord tabele de sistem acelui utilizator. Am scris comanda pl / sql. dar dă eroare.

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 

Care este greșeala? mulțumesc.

Folosesc 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 

Comentarii

  • Încercați să adăugați dublu ghilimele proprietarului și numele tabelului. EXECUTAȚI IMEDIAT ‘ ACORDAȚI TOATE PRIVILEGII PE ” ‘ || t.owner || ‘ „. ” ‘ || t.table_name || ‘ ” PENTRU GGSTEST ‘;
  • ACORDAȚI TOT PE IX.AQ $ _STREAMS_QUEUE_TABLE_L PENTRU GGSTEST; nu este o eroare. Dar pl / sql, buclă; dă eroare.
  • apoi încercați acest lucru: ACORDAȚI TOT PE IX. ” AQ $ _STREAMS_QUEUE_TABLE_L ” TO GGSTEST nu funcționează ‘, poate fi ceva cu funcția Advanced Queue …
  • Ce ‘ s tipul obiectului? selectați OBJECT_TYPE, STATUS Din dba_objects unde proprietar = ‘ IX ‘ și object_name = ‘ AQ $ _STREAMS_QUEUE_TABLE_L ‘
  • Am încercat ‘ s-a funcționat. Tipul de stare = TABLE și status = VALID

Răspuns

GRANT ALL PRIVILEGES ON .... este sintaxa privilor MySQL.

Trebuie să faceți:

GRANT ALL ON SCHEMA.TABLE TO USER 

Consultați documentația .

Comentarii

  • Bună, am învățat că a fost și o sintaxă MySQL, dar: verifică aceasta
  • grant all privileges to USERNAME este complet diferit și este un lucru la nivel de db.
  • Există o secțiune intitulată ” Acordarea privilegiilor de obiect pe o masă unui utilizator: Exemplu ”
  • De fapt, Dumnezeu știe. Nu ‘ nu aveți un DB la îndemână pentru a testa: /
  • Oferă aceeași eroare ..

Răspuns

Este comanda corectă. Anterior, a dat erori din cauza tabelelor de instalare ale 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; / 

Răspuns

problema se datorează caracterelor interpretate de PL / SQL, cum ar fi semnul dolarului sau eticheta hash. Prin adăugarea ghilimelelor, nu veți mai primi eroarea.

Cu respect.

Comentarii

  • poate hash. ‘ nu dă erori cu semnul dolar.
  • Exclud schemele APEX, XDB, FLOW_FILES, ORDDATA și ‘ s a funcționat.

Răspuns

Încerc pentru a acorda utilizatorului toate privilegiile tuturor tabelelor.

De ce?

Și în viitor nu trebuie să adaug niciun privilegiu acelui utilizator.

Da, o veți face.
De îndată ce adăugați un alt tabel, trebuie să repetați întregul proces și trebuie să faceți acest lucru pentru fiecare utilizator. Aș sugera că aceasta nu este o utilizare eficientă a timpului dvs.

Trebuie să fac acest lucru.

Vom fi de acord să nu fim de acord.

vasta majoritatea utilizatorilor nu au nevoie (sau doresc) de „toate privilegiile” pe orice tabel; selectați, inserați, ștergeți și actualizați este tot ce au nevoie și tot ce ar trebui fi dat.
Cum îi veți explica conducerii dvs. cum a scăzut un sistem de producție (oricât de mult va dura tu să îl recuperați) deoarece un utilizator, undeva, a decis să renunțe la un tabel , doar pentru că au descoperit că pot? Aceasta nu este responsabilitatea unui utilizator, așa că nu ar trebui să aibă permisiunea de a face acest lucru.

Citiți despre roluri.
Acordați privilegii la nivel de obiect unui rol, apoi acordați rolul respectiv [multor] utilizatori. Când modificați tabelele, trebuie doar să [acordați] din nou privilegii rolului (rolurilor) relevante; Oracle se va ocupa de „cascadarea” acestor privilegii pentru Utilizatorii relevanți. Dacă aveți nevoie de „niveluri” diferite de privilegii pentru diferite grupuri de utilizatori, creați mai multe roluri.

Comentarii

  • Deși acestea pot fi lucruri adevărate, el nu oferă niciodată informații despre dacă schema se schimbă, dacă env este dev sau producție și dacă ‘ este pentru un proiect personal sau pentru compania sa. Nu abordați niciodată problema lui reală legată de sintaxă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *