Vous n'êtes pas identifié(e).

#1 10/09/2010 10:55:35

pitpoule
Membre

[Débutant] Privilèges de création d'une table dans une base

Bonjour à tous,

J'ai une question (sûrement toute bête) sur la création de table dans une base (moteur en version 8.4).

Je crée une base avec l'utilisateur postgres (superadmin) : toto
Je crée un utilisateur basique : titi (juste un "create user").

Je donne les droits à l'utilisateur titi de se connecter sur la base toto et il a le droit de créer des tables. C'est normal ? (j'imagine que oui tongue), Peut on limiter ce droit ?

Merci pour votre aide

Dernière modification par pitpoule (10/09/2010 10:56:18)

Hors ligne

#2 10/09/2010 11:26:09

gleu
Administrateur

Re : [Débutant] Privilèges de création d'une table dans une base

Tout le monde a le droit de créer des tables dans le schéma par défaut qu'est public. Il est possible de supprimer ce droit (instruction REVOKE, http://docs.postgresql.fr/8.4/sql-revoke.html) comme il est possible de créer un autre schéma qui ne pourra être modifié que par son propriétaire (il ne faudra pas oublier de supprimer ou verrouiller public).


Guillaume.

Hors ligne

#3 10/09/2010 11:31:34

pitpoule
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

ok, merci pour les infos

Hors ligne

#4 10/09/2010 16:11:38

pitpoule
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

Je reviens à la charge parce que je n'arrive pas à faire ce que je veux avec le revoke.

Je reprends depuis le début. Je crée une base toto

postgres=# create database toto;
CREATE DATABASE

Je crée ensuite l'utilisateur pitpoule

postgres=# create database toto;
CREATE DATABASE

Je revoke tous les droits à public et pitpoule pour être sur que personne ne peut rien faire

postgres=# REVOKE ALL ON DATABASE toto from public;
REVOKE
postgres=# REVOKE ALL ON DATABASE toto from pitpoule;
REVOKE

J'essaye de me connecte avec pitpoule, je n'y arrive pas, logique

root:/var/pgsql8.4/data# psql -U pitpoule -d toto 
psql: FATAL:  permission denied for database "toto"
DETAIL:  User does not have CONNECT privilege.

Maintenant je donne juste les droits de connect à pitpoule et j'arrive quand même à créer un table

postgres=# GRANT CONNECT ON DATABASE toto to pitpoule;
GRANT
root:/var/pgsql8.4/data# psql -U pitpoule -d toto 
psql (8.4.4)
Type "help" for help.

toto=> create table test (i integer);
CREATE TABLE

?? Qu'est ce que j'ai loupé ?

Hors ligne

#5 10/09/2010 16:33:36

Marc Cousin
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

Que le REVOKE sur database n'est pas récursif : il revoke les droits sur l'objet DATABASE, pas sur les objets qu'il contient.


Marc.

Hors ligne

#6 10/09/2010 16:39:22

pitpoule
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

Marc Cousin a écrit :

Que le REVOKE sur database n'est pas récursif : il revoke les droits sur l'objet DATABASE, pas sur les objets qu'il contient.

J'ai du mal à saisir, créer une table dans une base ce n'est pas un droit sur l'objet DATABASE ?
Quelle serait alors la commande correcte ?

Hors ligne

#7 10/09/2010 16:58:58

Marc Cousin
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

Non, le droit de créer une table dans une base, c'est en fait créer une table dans un schéma dans une base.

Donc pour l'interdire, c'est REVOKE CREATE ON SCHEMA public FROM pitpoule;

Cela interdit à l'utilisateur pitpoule la création d'un schéma.

Par ailleurs, si pitpoule est propriétaire de la base, il lui reste encore le droit de créer d'autres schéma

Dernière modification par Marc Cousin (10/09/2010 16:59:24)


Marc.

Hors ligne

#8 10/09/2010 17:24:16

gleu
Administrateur

Re : [Débutant] Privilèges de création d'une table dans une base

Cela interdit à l'utilisateur pitpoule la création d'un schéma.

Pour être précis, l'ordre SQL "REVOKE CREATE ON SCHEMA public FROM pitpoule;" interdit la création de n'importe quel type d'objets dans le schéma public pour l'utilisateur pitpoule.


Guillaume.

Hors ligne

#9 10/09/2010 17:26:04

gleu
Administrateur

Re : [Débutant] Privilèges de création d'une table dans une base

J'oubliais...

Par ailleurs, si pitpoule est propriétaire de la base, il lui reste encore le droit de créer d'autres schéma

Et des langages et des conversions et des tablespaces.


Guillaume.

Hors ligne

#10 13/09/2010 09:51:04

pitpoule
Membre

Re : [Débutant] Privilèges de création d'une table dans une base

Merci pour vos réponses, j'y vois un peu plus clair maintenant.

Un dernière pour la route : du coup quelles sont les bonnes pratiques à avoir sur une base de prod ? On doit systématiquement créer un nouveau schéma "privé" pour chaque base ?

Hors ligne

#11 13/09/2010 19:10:33

gleu
Administrateur

Re : [Débutant] Privilèges de création d'une table dans une base

On peut créer un schéma privé, on peut aussi supprimer les droits sur le schéma public.


Guillaume.

Hors ligne

Pied de page des forums