PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 12/10/2011 11:43:34

nledez
Membre

Pas tout compris

Bonjour,

Sur une install toute fraiche postgresql/8.4 sur ubuntu lucid, j'essaye de gérer mes bases/users :

CREATE ROLE toto WITH ENCRYPTED PASSWORD 'test' NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN;
CREATE DATABASE toto;
GRANT ALL PRIVILEGES ON DATABASE toto TO toto;

CREATE ROLE test WITH ENCRYPTED PASSWORD 'toto' NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN;
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON DATABASE test TO test;

Maintenant je me connecte avec le user test dans phpPgAdmin (qui est sur une autre machine).

Et j'arrive à créer une table dans le shema du user toto.

Donc je ne comprend plus rien...

Help !

Dernière modification par nledez (12/10/2011 11:44:25)

Hors ligne

#2 12/10/2011 13:17:09

frost242
Administrateur

Re : Pas tout compris

Bonjour,

Attention concernant le vocabulaire. En vous connecter avec le user test et en allant voir chez toto,vous vous connectez sur la BASE toto et n'allez pas voir dans le schéma de toto. Une instance Postgres peut héberger plusieurs bases de données - pour preuve, les deux ordres CREATE DATABASE que vous avez passez.
Et pour vous répondre, lorsque vous faites le CREATE DATABASE, Postgres vous place implicitement un ordre "GRANT CONNECT, TEMPORARY ON DATABASE base TO public;" public étant un alias pour dire "tout le monde".
Donc pour interdire à test de se connecter sur la base toto, vous devrez y aller en deux étapes :
- REVOKE CONNECT, TEMPORARY ON DATABASE toto FROM public;
- GRANT CONNECT, TEMPORARY ON DATABASE toto TOTO;

Et contrairement à Oracle (car j'imagine que la confusion vient de là), un utilisateur ne dispose pas d'un schéma particulier qui lui est dédié. A vous de créer les bons schémas dans les bonnes bases. En revanche, chaque base possède un schéma "public" dans lequel tout le monde peut créer des objets.
De la même façon, le schéma public reçoit implicitement un "GRANT ALL ON SCHEMA public TO public;".


Thomas Reiss

Hors ligne

Pied de page des forums