Jeg bruker oracle 12c. Jeg prøver å gi alle rettigheter til alle tabeller til en bruker. Og i fremtiden trenger jeg ikke legge til noen rettigheter til den brukeren. Jeg trenger å gjøre dette. Jeg vil ikke gi systemtabeller til den brukeren. Jeg skrev pl / sql kommando. men det gir feil.
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
Hva er feilen? takk.
Jeg bruker 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 å legge til dobbelt sitater til eieren og bordnavnet. EXECUTE IMMEDIATE ' TILGJENG ALLE PRIVILEGER PÅ " ' || t.eier || ' ". " ' || t.table_name || ' " TIL GGSTEST ';
- TILGAV ALLE PÅ IX.AQ $ _STREAMS_QUEUE_TABLE_L TIL GGSTEST; det er ikke feil. Men pl / sql, loop; det gir feil.
- så prøv dette: GRANT ALL ON IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TIL GGSTEST Hvis det fungerer ikke ', det kan være noe med Advanced Queue-funksjonen …
- Hva ' s objektets type? velg OBJECT_TYPE, STATUS Fra dba_objects hvor eier = ' IX ' og object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
- Jeg prøvde det ' fungerte. Status type = TABELL og status = Gyldig
Svar
GRANT ALL PRIVILEGES ON ....
er MySQL privs syntaks.
Du må gjøre:
GRANT ALL ON SCHEMA.TABLE TO USER
Se dokumentasjonen .
Kommentarer
- Hei, jeg lærte at det også var en MySQL-syntaks, men: dette
-
grant all privileges to USERNAME
er helt annerledes, og er en db-bred ting. - Det er en seksjon med tittelen " Tildeling av objektrettigheter på et bord til en bruker: Eksempel "
- Egentlig vet Gud. Ikke ' t ha en DB praktisk å teste: /
- Det gir samme feil ..
Svar
Det er riktig kommando. Tidligere ga det feil på grunn av orakles installasjonstabeller.
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 tolkes av PL / SQL, som dollartegnet eller hash-taggen. Ved å legge til dobbelt anførselstegn får du ikke feilen lenger.
Hilsen.
Kommentarer
- kanskje hash. det gir ikke ' feil med dollartegn.
- Jeg ekskluderer APEX-, XDB-, FLOW_FILES-, ORDDATA-skjemaer, og det ' s fungerte.
Svar
Jeg prøver for å gi alle rettigheter til alle tabeller til en bruker.
Hvorfor?
Og i fremtiden trenger jeg ikke legge til noen rettigheter til brukeren.
Ja, det gjør du.
Så snart du legger til en annen tabell, må du gjenta hele prosessen og du må gjøre det for hver bruker. Jeg vil foreslå at dette er ikke en effektiv bruk av tiden din.
Jeg må gjøre dette.
Vi er enige om å være uenig.
Det store flertallet av brukere trenger ikke (eller vil ha) «alle rettigheter» på et hvilket som helst bord; velg, sett inn, slett og oppdater er alt de trenger og alt de burde bli gitt.
Hvordan skal du forklare ledelsen din hvordan et produksjonssystem gikk ned (så lenge det tar deg å gjenopprette det) fordi noen brukere, et sted, bestemte seg for å droppe en tabell , bare fordi de oppdaget at de kunne? At «s ikke brukerens ansvar, så de burde ikke» t ha tillatelse til det i utgangspunktet.
Les om roller.
Gi rettigheter på objektnivå til en rolle, og gi deretter denne rollen til [mange] brukere. Når du endrer tabeller, trenger du bare å [gi] rettigheter til de aktuelle rollene; Oracle vil ta seg av «cascading» disse rettighetene til de aktuelle brukerne. Hvis du trenger forskjellige «nivåer» av privilegium for forskjellige brukergrupper, kan du opprette flere roller.
Kommentarer
- Selv om dette kan være sanne ting, gir han aldri informasjon om om skjemaet endres, om env er dev eller produksjon, og hvis det ' er for et personlig prosjekt eller hans selskap. Du tar aldri tak i hans faktiske syntaksrelaterte problem.