TL; DR: Les nouveaux utilisateurs peuvent créer des tables dans le public
schéma parce que les gens se sont plaints que c'était trop difficile quand ils ne pouvaient pas.
Si vous n'aimez pas les valeurs par défaut, vous devez probablement créer une nouvelle base de données de modèles avec la configuration initiale que vous souhaitez. Par exemple, vous pourriez:
DROP SCHEMA public;
ou
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
dans votre modèle.
Si vous souhaitez que l' public
utilisateur n'ait aucun droit sur une base de données, vous devez en outre:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
afin que l' public
utilisateur ne puisse pas créer de schémas ou utiliser des tables temporaires.
Personnellement, si je concevais cela, je donnerais aux utilisateurs le TEMP
droit sur la base de données par défaut, mais pas CREATE
(schémas dans la base de données) ou CREATE
(tables dans le public
schéma). Je les réserverais pour le propriétaire.
Ce sont des choix qui ont été faits il y a longtemps, et il est assez difficile de les changer maintenant.
En l'état actuel des choses, il y a des plaintes régulières selon lesquelles il est trop difficile de démarrer avec PostgreSQL car vous devez créer un compte utilisateur et vous voulez souvent créer également une base de données. Pourquoi ne les créons-nous pas automatiquement et par défaut, nous faisons confiance au mode d'authentification pour le rendre plus facile? Pourquoi l' postgres
utilisateur n'a-t-il pas par défaut le mot de passe postgres
? Pourquoi ne créons-nous pas simplement des utilisateurs s'ils existent dans le système d'exploitation? etc.
Il existe de véritables problèmes de convivialité pour les nouveaux utilisateurs - en particulier, la plupart des gens ne peer
savent pas ce qu'est l' auth, ni pourquoi le simple fait d'exécuter psql
après l'installation de PostgreSQL leur indique qu'il n'y a pas d'utilisateur du nom auquel ils sont connectés.
C'est aussi pg_hba.conf
un fichier de configuration compliqué, mais les utilisateurs sont créés au niveau SQL. Cette division déroute les utilisateurs.
Beaucoup de choses, cependant, sont des compromis entre les valeurs par défaut sécurisées et les valeurs par défaut faciles où le projet ne va jamais rendre tout le monde heureux.
revoke create on database [databasename] from [username];
et la base de données est désormais vraiment en lecture seule pour [nom d'utilisateur]. Droite? Je reviendrai sur cette réponse après avoir lu un bon livre Postgres :)