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

Administration PostgreSQL Discussion :

[QST] creation d'un utilisateur


Sujet :

Administration PostgreSQL

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut [QST] creation d'un utilisateur
    Bonjour a tous,

    après avoir potasser la doc postgresql, je n'ai pas bien comprit une chose concernant les droits.

    Je voudrai créer un utilisateur qui a tous les droits sur sa base de données (création de table , select, etc ...) mais qui ne puise pas voir ni accéder au base de données des autres utilisateurs.

    je ne suis pas si je suis très clair, mais voici ce que je fais d'équivalent sur une BDD MySQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE USER 'user'@'localhost' IDENTIFIED BY 'mdp';
    CREATE DATABASE IF NOT EXISTS userDb ;
    GRANT USAGE ON userDb . * TO 'user'@'localhost' IDENTIFIED BY 'mdp';
    GRANT alter, create, create temporary tables, delete, drop, execute, index, insert, lock tables, select, update, on userDb.* to user@'localhost' identified by 'mdp';
    FLUSH PRIVILEGES;

    Voici ce que je pense faire, mais je ne suis pas sur que cela correspond bien (j'ai pas accès a la BDD postgresql pour testé ...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE USER user PASSWORD 'mdp' CREATEDB;
    GRANT ALL ON userDb.* TO user;
    Ceci est t'il correct par rapport a ce que je souhaite ?

    (pour la création d'une base de données, je n'ai trouver que des commandes shell.

    connaissez vous un autre moyen ?)

    je vous remercie d'avance pour vos lumière

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE USER <user_name>
    WITH PASSWORD <password>;
     
    GRANT ALL PRIVILEGES 
        ON DATABASE <database_name>
        TO <user_name>;
    CREATEDB serait pour lui donner le privilèges de créer de nouvelles bases....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    oui, suis je bête

    le grant effectue la création de la base de données ?

    Dans tous les cas, merci

    EDIT:
    j'ai ma réponse, le grant ne créer pas la BDD. Donc comment faire pour créer cette BDD ?

    bon, j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create user toto with password 'toto';
    create database toto;
    grant all privileges on database toto to toto;

    et voici ce que me donne un \l
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                                 Liste des bases de données
        Nom    | Propriétaire | Encodage |  Tri  | Type caract. |    Droits d'accès
    -----------+--------------+----------+-------+--------------+-------------------
     postgres  | postgres     | LATIN1   | fr_FR | fr_FR        |
     template0 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres
               |              |          |       |              | postgres=CTc/postg
     template1 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres
               |              |          |       |              | postgres=CTc/postg
     toto      | postgres     | LATIN1   | fr_FR | fr_FR        | =Tc/postgres
               |              |          |       |              | postgres=CTc/postg
               |              |          |       |              | toto=CTc/postgres
    on voit bien que la BDD est créé mais:
    1. le propriétaire de la BDD est postgres, cela ne pose pas de probleme de sécurité ?
    2. Que veux dire le ?


    aussi, si je me loggue avec l'utilisateur toto, je vois toutes les bases (même tableau que precedement.) cela me pose problème, je ne voudrai pas que toto puisse voir les autres bases. Comment faire pour corrigé ce problème ?
    je vous remercie pour votre aide


    EDIT2: enfaite, c'est n'importe quoi, j'ai toto qui peux acceder et même crééer des tables dans la BDD de titi, j'ai postgres qui ne voit même pas les table créer par toto dans titi..... donc c'est le gros bordel, peut t'on me donner un coup de main ?


    -----------------------------------------------------

    Edit 3:

    Je vais reprendre tout ceci plus clairement. Voici exactement ce que je fais:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    root@slwms:/usr/local/pgsql/bin# psql --username postgres
    postgres=# create user toto with password 'toto';
    CREATE ROLE
    postgres=# create database toto owner toto;
    CREATE DATABASE
    postgres=# \l
                                 Liste des bases de données
        Nom    | Propriétaire | Encodage |  Tri  | Type caract. |    Droits d'accès
    -----------+--------------+----------+-------+--------------+-----------------------
     postgres  | postgres     | LATIN1   | fr_FR | fr_FR        |
     template0 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     template1 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     toto      | toto         | LATIN1   | fr_FR | fr_FR        |
    (4 lignes)
     
    postgres=# \q
    root@slwms:/usr/local/pgsql/bin# psql --username toto
    psql (9.0.3)
    Saisissez « help » pour l'aide.
     
    toto=> \l
                                 Liste des bases de données
        Nom    | Propriétaire | Encodage |  Tri  | Type caract. |    Droits d'accès
    -----------+--------------+----------+-------+--------------+-----------------------
     postgres  | postgres     | LATIN1   | fr_FR | fr_FR        |
     template0 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     template1 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     toto      | toto         | LATIN1   | fr_FR | fr_FR        |
    (4 lignes)
     
    toto=> CREATE TABLE films (
    toto(>     code        char(5) CONSTRAINT premierecle PRIMARY KEY,
    toto(>     titre       varchar(40) NOT NULL,
    toto(>     did         integer NOT NULL,
    toto(>     date_prod   date,
    toto(>     genre       varchar(10),
    toto(>     duree       interval hour to minute
    toto(> );
    NOTICE:  CREATE TABLE / PRIMARY KEY créera un index implicite « premierecle » pour la table « films »
    CREATE TABLE
    toto=> \dt
              Liste des relations
     Schéma |  Nom  | Type  | Propriétaire
    --------+-------+-------+--------------
     public | films | table | toto
    (1 ligne)
     
    toto=> INSERT INTO films
    toto->         VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comédie', '82 minutes');
    INSERT 0 1
    toto=> select * from films;
     code  |  titre  | did | date_prod  |  genre  |  duree
    -------+---------+-----+------------+---------+----------
     UA502 | Bananas | 105 | 1971-07-13 | Comédie | 01:22:00
    (1 ligne)
     
    toto=> \q
    root@slwms:/usr/local/pgsql/bin# psql --username postgres
    psql (9.0.3)
    Saisissez « help » pour l'aide.
     
    postgres=# create user titi with password 'titi';
    CREATE ROLE
    postgres=# create database titi owner titi;
    CREATE DATABASE
    postgres=# \dt
    Aucune relation trouvée.
    postgres=# \l
                                 Liste des bases de données
        Nom    | Propriétaire | Encodage |  Tri  | Type caract. |    Droits d'accès
    -----------+--------------+----------+-------+--------------+-----------------------
     postgres  | postgres     | LATIN1   | fr_FR | fr_FR        |
     template0 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     template1 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     titi      | titi         | LATIN1   | fr_FR | fr_FR        |
     toto      | toto         | LATIN1   | fr_FR | fr_FR        |
    (5 lignes)
     
    postgres=# \q
    root@slwms:/usr/local/pgsql/bin# psql --username titi
    psql (9.0.3)
    Saisissez « help » pour l'aide.
     
    titi=> \dt
    Aucune relation trouvée.
    titi=> \l
                                 Liste des bases de données
        Nom    | Propriétaire | Encodage |  Tri  | Type caract. |    Droits d'accès
    -----------+--------------+----------+-------+--------------+-----------------------
     postgres  | postgres     | LATIN1   | fr_FR | fr_FR        |
     template0 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     template1 | postgres     | LATIN1   | fr_FR | fr_FR        | =c/postgres          +
               |              |          |       |              | postgres=CTc/postgres
     titi      | titi         | LATIN1   | fr_FR | fr_FR        |
     toto      | toto         | LATIN1   | fr_FR | fr_FR        |
    (5 lignes)
     
    titi=> \q
    root@slwms:/usr/local/pgsql/bin# psql --username titi --dbname toto
    psql (9.0.3)
    Saisissez « help » pour l'aide.
     
    toto=>\dt
              Liste des relations
     Schéma |  Nom  | Type  | Propriétaire
    --------+-------+-------+--------------
     public | films | table | toto
    (1 ligne)
    Donc comme vous pouvez le voir, j'ai créer deux utilisateurs (titi et toto). Avec toto et dans sa base, j'ai créer un table.
    Le problème est que titi et toto peuvent voir les table postgres, template0, template1 et l'autre table qui est soit a titi soit a toto.

    Aussi, il est possible de pour titi de rentré dans la base de toto et de voir la table que j'ai précedament créé.

    Alors, comment faire pour:
    1. Bloquer l'utilisateur dans sa base (la base où il est le propriétaire) ?
    2. Empêcher de voir les autres bases ?


    Encore une fois merci pour votre aide

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il me semble bien qu'empêcher de "voir" les autres bases n'est pas possible. Bien sûr il est possible d'empêcher l'utilisateur de s'y connecter, mais pas de savoir que la base existe.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    arf, pas terrible ça....

    comment fait on pour empêché les connexions sur les autres bases ?
    De plus pourquoi mes utilisateurs on des droits alors que je n'ai pas fait de grant ???

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Pour les droits de base, il doit d'agir des droits de PUBLIC, pour verrouiller il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REVOKE ALL ON database machin FROM public;
    Dès lors, seul le possesseur de la base (celui qui l'a créé) ou un super-utilisateur pourra s'y connecter.

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    d'accord donc quand je supprime les droit public sur la table, cela fonctionne.

    Par contre pourquoi mon propriétaire de la table a t'il tous les droits sans que j'utilise un grant sur lui?

    Aussi, je pense que l'on peut cacher les autre base car dans ma fac, on ne peut voir les base des autres utilisateur.

    EDIT: nouveau truc bizarre, je peux me connecter PHP sans mot de passe avec l'utilisateur toto !!!! alors que celui-ci a un mot de passe....

    Encore autre chose, je peut me connecter avec postgres en php. Est t'il possible d’empêcher cela ?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par hannibal.76 Voir le message
    Par contre pourquoi mon propriétaire de la table a t'il tous les droits sans que j'utilise un grant sur lui?
    Parce que ce comportement par défaut répond à la majorité des besoins.

    Aussi, je pense que l'on peut cacher les autre base car dans ma fac, on ne peut voir les base des autres utilisateur.
    Je n'y crois pas trop. Que renvoie cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datname FROM pg_database;
    EDIT: nouveau truc bizarre, je peux me connecter PHP sans mot de passe avec l'utilisateur toto !!!! alors que celui-ci a un mot de passe....
    Ca veut dire qu'il y a une entrée correspondante avec "trust" dans pg_hba.conf.

    Encore autre chose, je peut me connecter avec postgres en php. Est t'il possible d’empêcher cela ?
    C'est un peu la même réponse que la question d'avant, je pense. Il y a un pg_hba.conf trop permissif, il faut supprimer la possibilité de se connecter sans mot de passe.
    Une fois qu'il y a un MDP obligatoire, si le script php ne le connait pas, le problème est réglé.

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    donc j'ai été voir le fichier pg_hba.conf et voici a quoi il ressemble maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
     
    # "local" is for Unix domain socket connections only
    local   all             all                                     md5
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            md5
    # IPv6 local connections:
    host    all             all             ::1/128                 md5

    avant il était comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
     
    # "local" is for Unix domain socket connections only
    local   all             all                                     trust
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    host    all             all             ::1/128                 trust
    j'ai placer toutes les méthodes d'authentification en md5. Ainsi un mot de passe est toujours demandé

    donc cela résoud mes problème. merci (pour la connexion a ma fac, étant en vacance je ne peux te dire cela tout de suite, je vérifierai lundi )


    EDIT: par contre cela me pose un nouveau problème, je vous passe les détail, mais comment faire pour passé le mot de passe d'un utilisateur directement dans la ligne de commande de postgresql ?

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    EDIT: par contre cela me pose un nouveau problème, je vous passe les détail, mais comment faire pour passé le mot de passe d'un utilisateur directement dans la ligne de commande de postgresql ?
    Le plus simple est de le passer par la variable d'environnement PGPASSWORD, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ PGPASSWORD=truc psql -d base
    La méthode recommandée par la doc est de se créer un fichier .pgpass car il semble que sur certains systèmes, les variables d'environnement sont moins sûres.

Discussions similaires

  1. WSS 3 creation et authentification utilisateur
    Par thuric dans le forum SharePoint
    Réponses: 6
    Dernier message: 08/04/2009, 15h59
  2. Réponses: 0
    Dernier message: 02/11/2008, 14h56
  3. Creation automatique d'utilisateurs
    Par sotognon dans le forum Linux
    Réponses: 9
    Dernier message: 10/09/2008, 16h22
  4. Probleme de creation d'un utilisateur
    Par Safaritn dans le forum Administration système
    Réponses: 9
    Dernier message: 02/04/2008, 18h58
  5. Creation d'un utilisateur sous Oracle 10g developer
    Par anouar dans le forum Oracle
    Réponses: 2
    Dernier message: 17/08/2006, 08h51

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