From: | Andrew Dunstan <andrew(dot)dunstan(at)2ndquadrant(dot)com> |
---|---|
To: | Kyle Bateman <kyle(at)batemans(dot)org>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Connect as multiple users using single client certificate |
Date: | 2019-10-11 18:12:12 |
Message-ID: | 104a2c01-e654-7a49-8a6e-2be17a8e0341@2ndQuadrant.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 10/11/19 1:58 PM, Kyle Bateman wrote:
> I have some JS middleware that needs to securely connect to the
> postgresql back end. Any number of different users may connect via
> websocket to this middleware to manage their connection to the
> database. I want the JS process to have a client certificate
> authorizing it to connect to the database.
>
> I have this line in my pg_hba.conf:
>
> hostssl all +users all cert
>
> So the idea is, I should be able to connect as any user that is a
> member of the role "users."
>
> Under this configuration, I can currently connect as the user "users"
> but not as "joe" who is a member of the role "users." I get:
>
> FATAL: certificate authentication failed for user "joe"
>
> This makes sense as the commonName on the certificate is "users" and
> not "joe." But the documentation for pg_hba.conf states that
> prefixing the username with a "+" should allow me to connect as any
> role who is a member of the stated role.
>
> Is there a way to do this via client certificate authorization? I
> have no way of knowing the specific usernames ahead of time, as new
> users may be created in the database (thousands) and I can't really be
> creating separate certificates for every different user.
>
>
I think the short answer is: No. The client certificate should match the
username and nothing else. If you don't want to generate certificates
for all your users I suggest using some other form of auth (e.g.
scram-sha-256).
The long answer is that you can use maps, but it's probably not a good
idea. e.g. you have a map allowing foo to connect as both bar and baz,
and give both bar and baz a certificate with a CN of foo. But then bar
can connect as baz and vice versa, which isn't a good thing.
cheers
andrew
--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Tomas Vondra | 2019-10-11 18:46:20 | Re: BRIN index which is much faster never chosen by planner |
Previous Message | Andrew Dunstan | 2019-10-11 18:04:41 | Re: stress test for parallel workers |