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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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 999
    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 999
    Billets dans le blog
    6
    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 éclairé
    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
    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 Expert
    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
    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 éclairé
    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
    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 Expert
    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
    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.

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