On 2018-Jul-18, Marco van Eck wrote:
> Since .pgpass files contain plain-text passwords, I searched for an
> alternative.
> In the attached patch I've added the possibility to run a command to
> produce the content of the pgpass file, in exactly the same format. In this
> way I could use gpg or any other command to decrypt a pgpass file. It will
> prefer the .pgpass file and will not call the command.
>
> This would be my environment variable, to have no plain-text password:
> PGPASSCOMMAND="gpg -q -d pgpass.gpg"
>
> Other usages of the variable:
> PGPASSCOMMAND="cat pgpass"
> PGPASSCOMMAND="curl http://passwords/really-unsecure-pgpass"
> PGPASSCOMMAND="my-own-secure-pgpass-script"
>
> The submitted patch does it's job, though the command could throw errors.
>
> What do you think of this solution?
Seems to me that passing %-specifiers to the command would make it more
useful (%u for "user", "host" etc) -- your command could refuse to give
you a password for the superuser account for instance but grant one for
a read-only user. Or grant a password for the (hypothetical) pg_backup
user to the account doing the backups, but not to anyone else. Maybe if
the root/postgres user runs the program, all passwords are printed for
the instances in localhost/127.0.0.1.
That way, a client-side centralized security policy is just a SMOP.
Maybe there are reasons why this doesn't make sense and I'm not seeing
them -- if you do please point'em out.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services