web-dev-qa-db-fra.com

accorder à un utilisateur tous les privilèges de toutes les tables de la base de données

J'utilise Oracle 12c. J'essaie d'accorder tous les privilèges de toutes les tables à un utilisateur. Et à l'avenir, je n'aurai pas besoin d'ajouter de privilèges à cet utilisateur. Je dois le faire. Je ne veux pas accorder de tables système à cet utilisateur. J'ai é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 l'erreur? Merci.

J'utilise 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
4

GRANT ALL PRIVILEGES ON .... est la syntaxe des privilèges MySQL.

Tu as besoin de faire:

GRANT ALL ON SCHEMA.TABLE TO USER 

Voir la documentation .

2
Philᵀᴹ

C'est la bonne commande. Auparavant, il donnait une erreur en raison des tables d'installation d'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;
    /
2

le problème est dû à des caractères interprétés par PL/SQL, comme le signe dollar ou la balise de hachage. En ajoutant des guillemets doubles, vous n'obtiendrez plus l'erreur.

Cordialement.

1
Jefferson B. Elias

J'essaie d'accorder tous les privilèges de toutes les tables à un utilisateur.

Pourquoi?

Et à l'avenir, je n'aurai pas besoin d'ajouter 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 dirais que ce n'est pas une utilisation efficace de votre temps.

Je dois le faire.

Nous serons d'accord pour ne pas être d'accord.

La grande majorité des utilisateurs n'a pas besoin (ou ne veut pas) de "tous les privilèges" sur une table; sélectionner, insérer, supprimer et mettre à jour est tout ce dont ils ont besoin et tout ce qu'ils doivent recevoir.
Comment allez-vous expliquer à votre direction comment un système de production est tombé en panne (pour le temps qu'il vous faut pour le récupérer) parce que un utilisateur, quelque part, a décidé de laisser tomber une table, juste parce qu'il a découvert qu'il le pouvait? Ce n'est pas la responsabilité d'un utilisateur, donc il ne devrait pas avoir l'autorisation à elle en premier lieu.

Renseignez-vous sur les rôles.
Accordez des privilèges de niveau objet à un rôle, puis accordez ce rôle à [plusieurs] utilisateurs. Lorsque vous modifiez des tables, vous n'avez qu'à [ré] accorder des privilèges au (x) rôle (s) concerné (s); Oracle se chargera de "mettre en cascade" ces privilèges aux utilisateurs concernés. Si vous avez besoin de différents "niveaux" de privilèges pour différents groupes d'utilisateurs, créez plusieurs rôles.

0
Phill W.