Administration des bases de données

Blogue

Les cours

Donner des droits sur tout un schéma en Oracle


Rédigé par , le
Voici la problématique : Comment offrir à un usager des droits sur toutes les tables d'un autre schéma/base de données en Oracle ?
 
Pour MySQL, ceci se fait en une seule commande :
GRANT SELECT, INSERT, UPDATE, DELETE ON yannick.* TO 'fred'@'%';
Pour Oracle, il faut y aller à la mitaine :
GRANT SELECT, INSERT, UPDATE, DELETE ON YANNICK.USAGER TO FRED;
GRANT SELECT, INSERT, UPDATE, DELETE ON YANNICK.PRODUIT TO FRED;
...
GRANT SELECT, INSERT, UPDATE, DELETE ON YANNICK.TRANSACTION TO FRED;
Heureusement, en prenant avantage de PL/SQL et du dictionnaire de données Oracle, on peut exécuter le script suivant afin d'arriver au même résultat. 
BEGIN
   FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='YANNICK') LOOP
      EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' ||
                         R.owner || '.' || R.table_name || ' TO FRED';
   END LOOP;
END;
/
Note : Il faut exécuter ce script avec l'usager créateur (le schéma) ou avec un usager ayant suffisamment de droits (ex: DBA)
 
Merci à Yannick F (A2013) pour ce script. Simple et puissant !
Les commentaires sur cet article
Par : Omega
2014-07-22 06:50:52

Bonjour
Je suis architecte SI et j'ai généré un modèle de donnée à partir du modèle.
Le modèle fait communiquer entre eux des package de données, correspondant à des user / schema sous Oracle.

Ma question est la suivante :
Est-ce à moi ou au DBA de fournir l’environnement de test avec les droits qui permettent à la création des tables, d'assumer les liens d'intégrtité FK inter schema.

D'avance merci de vos réponse

Par : Frédéric
2014-07-22 09:17:50

@Omega

Avant toute chose, il faut voir où se situe la limite de ce que fait votre DBA dans l'organisation. S'il ne gère que la bonne santé des serveurs et des backups, j'imagine qu'il est convenu que ces tâches vous reviendront donc.

Cela dit, je crois que dès que l'on parle de "droits", et d' "environnements", c'est plus du domaine du DBA. Ce type de tâches contient des décisions importantes qui reviennent naturellement au DBA. Par exemple : quels seront les droits de l'usager utilisé pour l'environnement de test? Sur quel serveur cet environnement sera-t-il déployé? Quel est la taille maximale que cet environnement peut atteindre? Quel est le CPU maximum qui peut être utilisé pour ces tests? Y aura-t-il des stress tests faist sur cet environnement? Comment créer l'environnement et les tables de façon à optimiser les requêtes (on ne parle pas seulement d'index ici, mais aussi de structure de tables)? etc...

J'espère que cela vous aidera à trouver à qui revient cette tâche dans votre contexte!

Par : SQLpro
2017-03-13 12:46:32

Tout d'abord on ne doit pas parler le droits mais de privilèges. Ce n'est pas l'utilisateur qui écrit ou lit les données, c'est le moteur qui le fait. En revanche l'utilisateur est autorisé à lancer telle ou telle commande sur tel ou tel objet et donc autorisation se commande sur objet = privilège.

Ensuite la syntaxe MySQL est particulièrement idiote, car le concept de schéma n'existe pas dans MySQL !

Enfin, pour information, dans SQL Server ceci se fait via la commande :
GRANT SELECT ON SCHEMA::MonSchema TO MonUser;

Je vous laisser deviner le pourquoi du comment de la syntaxe "SCHEMA::MonSchema" et non "SCHEMA.MonSchema"

A +

Ajouter votre commentaire
(facultatif)
(facultatif et non divulgé)
Captcha image
Prenez le nombre affiché et faites moins 1.
 
Blog  

Les articles


Pour envoyer une demande d'assistance à l'enseignant, cliquez ici