J'essaie d'accorder tous les privilèges sur toutes les tables d'une base de données donnée à un nouvel utilisateur postgres (pas au propriétaire). Il semble que GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
cela ne fait pas ça. Après avoir exécuté cette commande avec succès (en tant qu'utilisateur postgres), j'obtiens ce qui suit en tant que new_user:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Deux questions:
1) Que fait la commande ci-dessus, alors, si vous n'accordez pas toutes les autorisations sur toutes les tables de my_db?
2) Quelle est la manière appropriée d'octroyer toutes les autorisations sur toutes les tables à un utilisateur? (y compris sur toutes les tables créées dans le futur)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
ou vous ne pouvez pas insérer d'enregistrements.Il est possible de configurer plusieurs connexions pour agir en tant que propriétaire de la base de données:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Désormais, si l'utilisateur 1 ou l'utilisateur 2 se connecte, il dispose de toutes les autorisations sur "mydb" sans qu'aucune autorisation supplémentaire ne soit requise.
Cependant, je considérerais cette solution avec soin. Il est tentant de demander à votre application Web d’utiliser l’une de ces connexions pour éviter de créer des droits supplémentaires chaque fois que le schéma est mis à jour, mais vous supprimez ainsi une forme de protection très utile. Utilisez la solution ci-dessus si vous voulez vraiment plusieurs "administrateurs", mais respectez le modèle "accorder tous les privilèges sur toutes les tables du schéma ..." ci-dessus pour la connexion à votre application "d'utilisation normale".
la source