IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

grant sur un schéma ou und bd


Sujet :

PostgreSQL

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut grant sur un schéma ou und bd
    Salut,

    Je cherche à spécifier des droits spéciaux. Je souhaite donner à des utilisateurs les droits en select, update, insert et delete sur un schéma ou une bd. De telle sorte qu'ils ne peuvent pas créer d'objet (table, index,...) et de leur donner sur une autre bd des droits totaux (all privilege).

    J'ai donc créé un group avec mes utilisateurs et maintenant je souhaite donner les grant... seulement je ne peux pas spécifier de bd ou schéma dans la syntaxe grant. Comment faire?

    Merci de l'aide.

    Â+

  2. #2
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 318
    Points
    318
    Par défaut
    Quelle version de postgresql utilises-tu ?

    La possibilité de faire un "grant" sur une base entière est apparu à partir de la 7.3. Cf doc GRANT

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Salut, merci pour l'info... alors j'ai la version 7.4. Mais d'après la doc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
         [,...] | ALL [ PRIVILEGES ] }
         ON [ TABLE ] tablename [, ...]
         TO { username | GROUP groupname | PUBLIC } [, ...]
     
     GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
         ON DATABASE dbname [, ...]
         TO { username | GROUP groupname | PUBLIC } [, ...]
    on ne peut pas donner des droits en select, insert, update ou delete à une base de données.

    J'ai essayé de faire un grant all privilege et ensuite de faire un revoke create sur le même groupe. Mais sans succès!

    Qqun n'aurait pas une idée? Je trouve bizarre que personne n'ait déjà eu ce problème!

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    J'ai même essayé de donner les droits "usage" sur un schéma... mais sans succès non plus!

    Est-ce qu'une mauvais configuration des fichiers de droit peuvent amener un problème quelconque?

  5. #5
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 318
    Points
    318
    Par défaut
    J'ai fais un peu le tour des forums et de google : point de salut à part des scripts.

    A ce que j'ai compris, on ne peut pas en l'état actuel des choses appliquer des droits tel que SELECT ou UPDATE à une base entière en un seul GRANT pour un utilisateur.

    @+

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Merci bien pour tes recherches. J'ai fait également le tour de quelques forums. Enfin bon, je vais gérer cela avec du code PL/pgSQL.

    Que ferais-tu à ma place? Je pensais créer une procedure PL/pgSQL qui fait le tour de tout les objets (table, index,séquence,...) et applique les grant voulu! non? J'appel cette procedure à chaque création dans la bd!

  7. #7
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 318
    Points
    318
    Par défaut
    Si tu veux, j'ai trouvé ce scripts dans les newsgroups (Cf ce post : How to grant a privilege on all tables or views or both of a database to someone?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    -- usage: SELECT grant_all('privilidge', 'user');
    -- grants privilidge (SELECT, UPDATE, INSERT, DELETE or ALL) to the user
    -- for all non-pg_ objects in the database (except indices).
     
    DROP FUNCTION grant_all(text, text);
    CREATE FUNCTION grant_all(text, text) RETURNS boolean AS '
    DECLARE item RECORD;
      priv ALIAS FOR $1;
      user ALIAS FOR $2;
    BEGIN
      FOR item IN SELECT * FROM pg_class
        WHERE relname !~ ''^pg_''
        AND relkind <> ''i''
      LOOP
        EXECUTE ''GRANT '' || priv
          || '' ON '' || quote_ident(item.relname)
          || '' TO '' || quote_ident(user);
      END LOOP;
      RETURN ''t'';
    END;' LANGUAGE 'plpgsql';

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Merci de ton aide... c'est bien sympa!

    Je note pas encore résolu car j'attends de pouvoir faire des tests avec PL/pgSQL.

  9. #9
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Salut, c'est de nouveau moi après quelques jours de recherche pour résoudre mon problème.

    Je remercie Krapulax pour son aide et son bout de code. Mais je n'arrive tjs pas à faire exactement ce que je veux.

    Le problème c'est dans pg_hba.conf, on donne des droits en "visibilité" sur un certain nombre de base de données. Mais il n'est pas possible de dire que se sont des droits uniquement en lecture, modification ou autre. Donc je suis obligé de gérer cela avec les grant des users ou groupes.

    Je répète peut-être ce que je souhaite faire:

    User1 à le droit de faire ce qu'il veut sur db1 et db2.
    User2 à uniquement le droit de faire des insert,delete,update,select sur db1 et ce qu'il veut sur db2.

    Cela n'a pas l'air très compliqué mais pourtant!?!??

    User1 et le owner de db1 et db2. Mais le problème que je rencontre et que User2 peut de toutes façon, du moment qu'il a la visibilité sur db1 créer des tables, index, ou autre. Je ne sais pas comment lui enlever ces droits là!

    Si quelqu'un à encore une idée, c'est volontier.

    A+

  10. #10
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 318
    Points
    318
    Par défaut
    Enfin, je pense avoir la solution. J'ai fais pas mal de recherche depuis hier et beaucoup de test... comme toi j'imagine.... Ce qui est bien en aidant les autres, c'est que l'on apprends beaucoup de choses...

    Voilà ce que j'ai compris :
    - il est impossible d'enlever/d'accorder le privilège "CREATE" directement à un utilisateur. Par contre, on peut le faire sur un schema,
    - seul le createur de la table peut faire un drop table, il n'y a donc pas de gestion de droit sur ce privilège,
    - pour accorder les privilièges pour voir les tables, il faut accorder le priv. "usage" sur un schema, puis accorder les "select, insert etc etc" sur les tables,
    - il existe le schema qui est une sorte de sous-division de la base, le schema s'appelle public par défaut. Il existe aussi le groupe d'utilisateur public qui représente tous les utilisateurs. Ceci permet de gérer les droits pour tous les schemas public (pas les tables cependant) ou pour tous les utilisateurs d'un coup.

    En bref, dans ton cas :
    - User1 doit créer les bases db1 et db2, puis les tables, il a ainsi tous les droits sur les deux bases.

    - Pour User2, il faut faire sur db1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant all to schema public to User2;
    pour qu'il puisse voir les tables du chema public et en créer d'autres, puis utiliser le script pour lui donner les droits sur les tables. Du coup, il aura tous les droits, sauf le drop table qui n'appartient qu'au créateur de la table ou au super-utilisateur (postgres en l'occurence). Il pourra donc créer des tables, les utiliser, détruire les tables qu'il aura créer.

    - Pour User2, il faut faire sur db2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant usage to schema public to User2;
    pour qu'il puisse voir les tables du schema public mais qu'il ne puisse en créer d'autres, puis utiliser le script pour donner droits voulus.

    J'espère que je n'ai pas été trop confus et que cela réponds à ton attente. J'imagine que la prochaine question sera comment donner les droits de "drop table" à User2 sur la db1, mais je n'ai pas encore trouvé. Peut-être du côté des groupes.... a suivre....

Discussions similaires

  1. Avis sur un schéma E/A
    Par goutbouyo dans le forum Schéma
    Réponses: 8
    Dernier message: 08/03/2007, 22h14
  2. Grant sur toutes les tables en même temps
    Par jer64 dans le forum SQL
    Réponses: 3
    Dernier message: 25/09/2006, 07h59
  3. D7/Firebird 1.5 - Grant sur user
    Par jer64 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/09/2006, 22h53
  4. Grant sur plusieurs tables
    Par Bba_M dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/06/2006, 17h28
  5. Grant sur une séquence...
    Par jesus144 dans le forum Oracle
    Réponses: 4
    Dernier message: 16/01/2006, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo