Jeg bruger oracle 12c. Jeg forsøger at give alle rettigheder til alle tabeller til en bruger. Og i fremtiden behøver jeg ikke tilføje nogen rettigheder til den bruger. Jeg skal gøre dette. Jeg ønsker ikke at give systemtabeller til den bruger. Jeg skrev kommandoen pl / sql. men det giver fejl.

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 

Hvad er fejlen? tak.

Jeg bruger 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 

Kommentarer

  • Prøv at tilføje dobbelt citater til ejeren og tabelnavnet. UDFØR UMIDDELBART ' TILGIV ALLE PRIVILEGER PÅ " ' || t.ejer || ' ". " ' || t.table_name || ' " TIL GGSTEST ';
  • TILGIV ALLE PÅ IX.AQ $ _STREAMS_QUEUE_TABLE_L TIL GGSTEST; det er ikke fejl. Men pl / sql, loop; det giver fejl.
  • så prøv dette: GRANT ALL ON IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TIL GGSTEST Hvis det fungerer ikke ', det kan være noget med funktionen Advanced Queue …
  • Hvad ' s objektets type? vælg OBJECT_TYPE, STATUS Fra dba_objects hvor ejer = ' IX ' og object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
  • Jeg prøvede det ' s fungerede. Status type = TABEL og status = Gyldig

Svar

GRANT ALL PRIVILEGES ON .... er MySQL privs syntaks.

Du skal gøre:

GRANT ALL ON SCHEMA.TABLE TO USER 

Se dokumentationen .

Kommentarer

  • Hej, jeg lærte at det også var en MySQL-syntaks, men: dette
  • grant all privileges to USERNAME er helt anderledes og er en db-bred ting.
  • Der er et afsnit med titlen " Tildeling af objektrettigheder på et bord til en bruger: Eksempel "
  • Faktisk ved Gud det. Don ' t have en DB praktisk at teste: /
  • Det giver samme fejl ..

Svar

Det er den rigtige kommando. Tidligere gav det fejl på grund af oracles installationstabeller.

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; / 

Svar

problemet skyldes, at tegn fortolkes af PL / SQL, som dollartegn eller hash-tag. Ved at tilføje dobbelt anførselstegn får du ikke fejlen længere.

Hilsen.

Kommentarer

  • måske hash. det giver ikke ' fejl med dollartegn.
  • Jeg udelukker APEX-, XDB-, FLOW_FILES-, ORDDATA-skemaer, og det ' s fungerede.

Svar

Jeg prøver at give en bruger alle privilegier i alle tabeller.

Hvorfor?

Og i fremtiden behøver jeg ikke tilføje nogen rettigheder til den bruger.

Ja, det gør du.
Så snart du tilføjer en anden tabel, skal du gentage hele processen og du skal gøre det for hver bruger. Jeg vil foreslå at dette er ikke en effektiv brug af din tid.

Jeg er nødt til at gøre dette.

Vi er enige om at være uenige.

det store flertal af brugere har ikke brug for (eller ønsker) “alle rettigheder” på enhver tabel; vælg, indsæt, slet og opdater, er alt, hvad de har brug for, og alt hvad de skal blive givet.
Hvordan vil du forklare din ledelse, hvordan et produktionssystem gik ned (hvor længe det tager dig at gendanne det), fordi en eller anden bruger, et eller andet sted, besluttede at droppe en tabel , bare fordi de opdagede, at de kunne? At “s ikke en brugers ansvar, så de burde ikke” t have tilladelse til det i første omgang.

Læs op om roller.
Giv rettigheder på objektniveau til en rolle, og tildel derefter denne rolle til [mange] brugere. Når du ændrer tabeller, skal du kun [give] privilegier til de relevante roller; Oracle tager sig af at “kaskade” disse rettigheder til de relevante brugere. Hvis du har brug for forskellige “niveauer” af privilegium for forskellige brugergrupper, skal du oprette flere roller.

Kommentarer

  • Selvom dette kan være sande ting, giver han aldrig information om, hvis skemaet ændrer sig, om env er dev eller produktion, og hvis det ' er til et personligt projekt eller hans firma. Du løser aldrig hans aktuelle syntaksrelaterede problem.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *