Jutilise oracle 12c. Jessaye daccorder tous les privilèges de toutes les tables à un utilisateur. Et à lavenir, je nai pas besoin dajouter de privilèges à cet utilisateur. Je dois le faire. Je ne veux pas accorder de tables système à cet utilisateur. Jai écrit la commande pl / sql. mais cela donne une erreur.

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 

Quelle est lerreur? merci.

Jutilise 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 

Commentaires

  • Essayez dajouter un double cite le nom du propriétaire et de la table. EXÉCUTER IMMÉDIATEMENT ‘ DONNER TOUS LES PRIVILÈGES SUR  » ‘ || t.owner || ‘ « .  » ‘ || t.table_name || ‘  » TO GGSTEST ‘;
  • GRANT ALL SUR IX.AQ $ _STREAMS_QUEUE_TABLE_L TO GGSTEST; ce nest pas une erreur. Mais pl / sql, boucle; cela donne une erreur.
  • puis essayez ceci: GRANT ALL ON IX.  » AQ $ _STREAMS_QUEUE_TABLE_L  » TO GGSTEST Si cela ne ‘ t fonctionne, cela peut être quelque chose avec la fonction Advanced Queue …
  • What ‘ s le type de lobjet? sélectionnez OBJECT_TYPE, STATUS From dba_objects where owner = ‘ IX ‘ et object_name = ‘ AQ $ _STREAMS_QUEUE_TABLE_L ‘
  • Je lai essayé ‘ s travaillé. Status type = TABLE and status = VALID

Réponse

GRANT ALL PRIVILEGES ON .... est la syntaxe MySQL privs.

Vous devez faire:

GRANT ALL ON SCHEMA.TABLE TO USER 

Voir la documentation .

Commentaires

  • Bonjour, jai aussi appris que cétait une syntaxe MySQL, mais: check ceci
  • grant all privileges to USERNAME est complètement différent et concerne toute la base de données.
  • Il y a une section intitulée  » Accorder des privilèges dobjet sur une table à un utilisateur: exemple  »
  • En fait, Dieu le sait. Ne ‘ t avoir une base de données à portée de main pour tester: /
  • Cela donne la même erreur ..

Réponse

Cest la bonne commande. Auparavant, cela donnait une erreur à cause des tables dinstallation dOracle.

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éponse

le problème est dû aux caractères interprétés par PL / SQL, comme le signe dollar ou la balise de hachage. En ajoutant des guillemets doubles, vous nobtiendrez plus lerreur.

Cordialement.

Commentaires

  • peut-être du hachage. cela ne ‘ t donner une erreur avec le signe dollar.
  • Jexclus les schémas APEX, XDB, FLOW_FILES, ORDDATA et cela ‘ a fonctionné.

Réponse

Jessaye pour accorder tous les privilèges de toutes les tables à un utilisateur.

Pourquoi?

Et à lavenir, je naurai pas besoin dajouter de privilèges à cet utilisateur.

Oui, vous le ferez.
Dès que vous ajoutez une autre table, vous devez répéter tout le processus et vous devez le faire pour chaque utilisateur. Je suggère que ce nest pas une utilisation efficace de votre temps.

Je dois le faire.

Nous serons daccord pour ne pas être daccord.

La vaste majorité des utilisateurs nont pas besoin (ou ne veulent) de «tous les privilèges» sur aucune table; sélectionner, insérer, supprimer et mettre à jour est tout ce dont ils ont besoin et tout ce quils devraient être donné.
Comment allez-vous expliquer à votre direction comment un système de production est tombé en panne (le temps quil vous faut vous pour le récupérer) parce quun utilisateur, quelque part, a décidé de supprimer une table , simplement parce quils ont découvert quils le pouvaient? Ce nest pas la responsabilité dun utilisateur, donc ils ne devraient pas en avoir lautorisation en premier lieu.

Renseignez-vous sur les rôles.
Accordez des privilèges au niveau objet à un rôle, puis accordez ce rôle à [plusieurs] utilisateurs. Lorsque vous modifiez des tables, vous navez quà [ré] accorder des privilèges aux rôles concernés; Oracle se chargera de « cascader » ces privilèges aux utilisateurs concernés. Si vous avez besoin de différents «niveaux» de privilèges pour différents groupes dutilisateurs, créez plusieurs rôles.

Commentaires

  • Bien que ces choses puissent être vraies, il ne donne jamais dinformations sur si le schéma est en train de changer, si lenvironnement est de développement ou de production, et si elle ‘ s pour un projet personnel ou pour son entreprise. Vous ne résolvez jamais son problème de syntaxe réel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *