Est-ce que tous les utilisateurs ont besoin d'accéder à la base de données postgres dans pg_hba.conf?
-
22-10-2019 - |
Question
Je testais juste le processus de création d'utilisateur dans pgAdmin. J'ai une base de données db1
pour laquelle je veux créer un utilisateur pour pouvoir s'y connecter. Je veux que ce soit la seule base de données, l'utilisateur peut se connecter.
Après avoir créé l'utilisateur, j'ai ouvert mon fichier pg_hba.conf
et ajouté quelques lignes:
host db1 dbuser 127.0.0.1/32 md5
host db1 dbuser ::1/128 md5
L'utilisateur postgres a accès à toutes les bases de données:
host all postgres 127.0.0.1/32 md5
host all postgres ::1/128 md5
Lorsque je me connecte au serveur via pgAdmin, je reçois une erreur indiquant que dbuser
n'a pas accès à la base de données postgres
.
Est-ce normal? Devrait DBUSER même besoin d'accéder à la base de données Postgres, quand je veux qu'il ne db1
d'accès? Dès que j'ajoute postgres à la liste des bases de données pour dbuser
, je peux me connecter.
La solution
Ce que vous voyez est pgAdmin connexion à la configuration Maintenance DB - qui est postgres
par défaut. Sélectionnez un serveur dans le volet Explorateur d'objets et choisissez « Propriétés » dans le menu contextuel (clic droit). Le menu déroulant ne propose que les choix typiques, mais vous pouvez il suffit de taper un nom de base de données .
Si l'accès d'un utilisateur est limité à un base de données dans pg_hba.conf
(qui l'endroit le plus efficace pour le faire), vous pouvez le faire fonctionner avec pgAdmin en configurant < em> celui de la base de données db entretien. Rien de mal ne sortira.
L'autre option est d'accorder l'accès à l'entretien DB (postgres
ou autre) en pg_hba.conf
plus.
Vous pouvez également ouvrir toutes les portes en pg_hba.conf
et réglementer l'accès avec des autorisations de base de données, comme @a_horse expliqué dans sa réponse. Cela est plus facile à gérer, mais de restreindre l'accès à pg_hba.conf
est plus sûr et plus rapide - plus robuste contre les attaques DoS et charges lourdes. Il ne sera pas une grande différence dans la plupart des cas, cependant.
de pgAdmin 1.22 (version finale de pgAdmin III):
Le maintien domaine DB est utilisé pour spécifier la base de données initiale qui pgAdmin se connecte, et qui devrait avoir pgAgent schéma et les objets adminpack installé (à la fois en option). PostgreSQL 8.1 et au-dessus, l'entretien DB est normalement appelé « postgres », et de la template1 'versions antérieures est souvent utilisé, mais il est préférable de créer une base de données Postgres 'à cet effet afin d'éviter encombrent la base de données de modèle.
Autres conseils
Vous n'avez pas besoin de le faire à travers le pg_hba.conf.
Il suffit de révoquer le privilège de connexion sur la base de données de cet utilisateur.
Cependant par le public par défaut est accordé le privilège de connexion. Donc, vous devez d'abord Révoquer que:
revoke connect on db1 from public;
grant connect on db1 to dbuser;
Vous devez exécuter l'instruction revoke ... from public
pour toutes les bases de données pour assurer que seuls les utilisateurs spécifiques peuvent se connecter.
Une fois que vous avez fait cela, vous pouvez laisser pg_hba.conf « ouvert » pour tous les utilisateurs et toutes les bases de données.