Puis-je activer à la fois l'authentification homologue et md5 pour le même utilisateur local PostgreSQL dans pg_hba.conf?

14

Je voudrais permettre à un (super) utilisateur PostgreSQL d'être authentifié avec les méthodes d'authentification "peer" ou "md5", en utilisant de préférence des sockets de domaine Unix local dans les deux cas. Le problème est que l'ordre des entrées dans pg_hba.conf est important et la première correspondance sera appliquée.

Ce que j'ai:

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer
  local   all        all                 md5

Ce que je voudrais (syntaxe invalide):

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer-or-md5
  local   all        all                 md5

Voici quelques détails supplémentaires sur l'environnement dans lequel nous aimerions l'utiliser:

Sur ce serveur particulier, toutes les bases de données sont relativement petites (<10 Mo de données chacune) et purement en lecture seule. Ils sont lâchés et recréés chaque nuit par le superutilisateur harold. harold est également un compte système, donc "peer" fonctionne bien pour les tâches cronless sans mot de passe, etc. Ensuite, il y a une interface web accédant aux bases de données: elle utilise l'authentification md5 (l'utilisateur système est le serveur web, le nom d'utilisateur pg, le mot de passe et le nom de la base de données sont fournis par les visiteurs). Maintenant, je voudrais également permettre à l'utilisateur harold de se connecter via l'interface Web. Cela échoue en raison du paramètre "peer" pour harold.

La solution de contournement actuelle consiste à laisser l'interface Web se connecter via TCP, en utilisant

# TYPE    DATABASE   USER      ADDRESS        METHOD
  host    all        all       127.0.0.1/32   md5
  host    all        all       ::1/128        md5

en plus des entrées locales dans le premier exemple. Cela fonctionne, mais je préfère également utiliser des sockets locaux - pour les performances et en raison du sentiment profond que cela semble être la bonne chose à faire.

Est-ce possible? Existe-t-il de meilleures solutions de contournement pour nous?

Zilk
la source

Réponses:

10

Selon une question StackOverflow similaire , la réponse est non, vous ne pouvez pas activer deux types d'authentification pour le même type, base de données, utilisateur et adresse.

La question StackOverflow recommande d'utiliser un .pgpassfichier dans le répertoire personnel de l'utilisateur et d'utiliser l'authentification md5, mais je ne suis pas sûr que cela fonctionnerait nécessairement pour les tâches cron.

Nathan
la source
Cela fonctionnera si le cronjob provient du même utilisateur qui a .pgpass dans son répertoire personnel.
Andrei Mikhaltsov