Ik gebruik oracle 12c. Ik probeer alle rechten van alle tabellen aan een gebruiker te verlenen. En in de toekomst hoef ik geen privileges meer toe te voegen aan die gebruiker. Ik moet dit doen. Ik wil geen systeemtabellen toekennen aan die gebruiker. Ik schreef het pl / sql-commando. maar het geeft een fout.

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 

Wat is de fout? bedankt.

Ik gebruik 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 

Reacties

  • Probeer dubbele citeert naar de eigenaar en de naam van de tabel. UITVOEREN ONMIDDELLIJK ‘ VERLEENT ALLE VOORRECHTEN OP ” ‘ || t.owner || ‘ “. ” ‘ || t.table_name || ‘ ” NAAR GGSTEST ‘;
  • VERLEENT ALLES OP IX.AQ $ _STREAMS_QUEUE_TABLE_L AAN GGSTEST; het is geen fout. Maar pl / sql, loop; het geeft een fout.
  • probeer dan dit: GRANT ALL ON IX. ” AQ $ _STREAMS_QUEUE_TABLE_L ” NAAR GGSTEST Als het werkt niet ‘ t werkt, het kan iets zijn met de geavanceerde wachtrijfunctie …
  • Wat ‘ s het type object? selecteer OBJECT_TYPE, STATUS Van dba_objects waarbij eigenaar = ‘ IX ‘ en object_name = ‘ AQ $ _STREAMS_QUEUE_TABLE_L ‘
  • Ik heb het geprobeerd ‘ s werkte. Status type = TABEL en status = GELDIG

Antwoord

GRANT ALL PRIVILEGES ON .... is MySQL privs-syntaxis.

U moet het volgende doen:

GRANT ALL ON SCHEMA.TABLE TO USER 

Zie de documentatie .

Reacties

  • Hallo, ik heb geleerd dat het ook een MySQL-syntaxis was, maar: check dit
  • grant all privileges to USERNAME is totaal anders, en is iets db-breed.
  • Er is een sectie met de titel ” Objectrechten toekennen aan een tabel aan een gebruiker: Voorbeeld ”
  • Eigenlijk, god weet het. Laat ‘ geen DB bij de hand hebben om te testen: /
  • Het geeft dezelfde foutmelding.

Antwoord

Het is het juiste commando. Voorheen gaf het een fout vanwege de installatietabellen van 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; / 

Answer

het probleem is te wijten aan tekens die worden geïnterpreteerd door PL / SQL, zoals het dollarteken of de hashtag. Door dubbele aanhalingstekens toe te voegen, krijgt u de fout niet meer.

Met vriendelijke groet.

Reacties

  • misschien hash. het geeft geen ‘ fout met het dollarteken.
  • Ik sluit APEX-, XDB-, FLOW_FILES-, ORDDATA-schemas uit en het ‘ s werkte.

Answer

Ik probeer om alle rechten van alle tabellen aan een gebruiker te verlenen.

Waarom?

En in de toekomst hoef ik geen privileges meer toe te voegen aan die gebruiker.

Ja, dat zal u doen.
Zodra u een andere tabel toevoegt, moet u het hele proces en herhalen voor elke gebruiker. Ik zou willen voorstellen dat dit is geen efficiënt gebruik van je tijd.

Ik moet dit doen.

We zullen het ermee eens zijn dat we het oneens zijn.

De overgrote meerderheid van gebruikers heeft “niet nodig (of wil)” alle rechten “voor welke tafel dan ook; selecteren, invoegen, verwijderen en bijwerken is alles wat ze nodig hebben en alles wat ze zouden moeten gegeven worden.
Hoe ga je aan je management uitleggen hoe een productiesysteem uitviel (hoe lang het jij ook duurt om het te herstellen) omdat een gebruiker ergens heeft besloten om een tafel te laten vallen , alleen omdat ze ontdekten dat ze dat konden? Dat is niet de verantwoordelijkheid van de gebruiker, dus ze zouden “niet de toestemming ervoor moeten hebben in de eerste plaats.

Lees meer over rollen.
Verleen privileges op objectniveau aan een rol en verleen die rol vervolgens aan [veel] gebruikers. Wanneer u tabellen wijzigt, hoeft u alleen [opnieuw] rechten toe te kennen aan de relevante rol (len); Oracle zorgt voor het “cascaderen” van deze privileges naar de relevante gebruikers. Als u verschillende “niveaus” van privileges nodig heeft voor verschillende groepen gebruikers, maak dan meerdere rollen aan.

Opmerkingen

  • Hoewel dit misschien waar zijn, geeft hij nooit informatie over of het schema verandert, of de env dev of production is, en als het ‘ is voor een persoonlijk project of zijn bedrijf. Je pakt nooit zijn feitelijke syntaxisgerelateerde probleem aan.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *