Jag använder oracle 12c. Jag försöker ge alla användare behörighet i alla tabeller. Och i framtiden behöver jag inte lägga till några behörigheter till den användaren. Jag behöver göra detta. Jag vill inte ge systemtabeller till den användaren. Jag skrev kommandot pl / sql. men det ger fel.
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
Vad är felet? tack.
Jag använder 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
- Försök lägga till dubbla citat till ägaren och tabellnamnet. EXECUTE IMMEDIATE ' BEVILJA ALLA PRIVILEGER PÅ " ' || t.ägare || ' ". " ' || t.table_name || ' " TILL GGSTEST ';
- BEVILJA ALLA PÅ IX.AQ $ _STREAMS_QUEUE_TABLE_L TILL GGSTEST; det är inte fel. Men pl / sql, loop; det ger fel.
- försök sedan: GRANT ALL ON IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TILL GGSTEST Om det fungerar inte ', det kan vara något med funktionen Advanced Queue …
- Vad ' s objektets typ? välj OBJECT_TYPE, STATUS Från dba_objects där ägare = ' IX ' och object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
- Jag försökte det ' fungerar. Statustyp = TABELL och status = GILTIG
Svar
GRANT ALL PRIVILEGES ON ....
är MySQL privs syntax.
Du måste göra:
GRANT ALL ON SCHEMA.TABLE TO USER
Se dokumentationen .
Kommentarer
- Hej, jag lärde att det också var en MySQL-syntax, men: detta
-
grant all privileges to USERNAME
är helt annorlunda och är en db-hel sak. - Det finns ett avsnitt med titeln " Bevilja objektbehörigheter på en tabell till en användare: Exempel "
- Faktiskt, Gud vet. Har inte ' inte en DB som är praktisk att testa: /
- Det ger samma fel ..
Svar
Det är rätt kommando. Tidigare gav det fel på grund av orakels 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 beror på att tecken tolkas av PL / SQL, som dollartecknet eller hash-taggen. Genom att lägga till dubbla citat får du inte felet längre.
Hälsningar.
Kommentarer
- kanske hash. det ' t ger fel med dollartecken.
- Jag utesluter APEX-, XDB-, FLOW_FILES-, ORDDATA-scheman och det ' fungerade.
Svar
Jag försöker för att bevilja alla behörigheter i alla tabeller till en användare.
Varför?
Och i framtiden behöver jag inte lägga till några behörigheter till den användaren.
Ja, det gör du.
Så fort du lägger till en annan tabell måste du upprepa hela processen och du måste göra det för varje användare. Jag föreslår att det här är inte en effektiv användning av din tid.
Jag måste göra det.
Vi håller med om att inte hålla med.
Den stora majoriteten av användare behöver inte (eller vill) ”alla behörigheter” på vilken tabell som helst, välj, infoga, ta bort och uppdatera är allt de behöver och allt de borde ges.
Hur ska du förklara för din ledning hur ett produktionssystem gick ner (så länge det tar du att återställa det) eftersom någon användare någonstans bestämde sig för att släppa en tabell , bara för att de upptäckte att de kunde? Att ”s inte en användares ansvar, så de borde inte” t ha behörighet till det i första hand.
Läs upp på roller.
Bevilja en roll på objektnivå och bevilja sedan denna roll till [många] användare. När du ändrar tabeller behöver du bara [åter-] ge behörighet till relevanta roller. Oracle tar hand om att ”kaskadera” dessa privilegier för relevanta användare. Om du behöver olika ”nivåer” av behörighet för olika användargrupper, skapa flera roller.
Kommentarer
- Även om detta kan vara sanna saker, ger han aldrig information om om schemat förändras, om env är dev eller produktion, och om det ' är för ett personligt projekt eller hans företag. Du tar aldrig upp hans faktiska syntaxrelaterade problem.