Re: Seeking the correct term of art for the (unique) role that is usually called "postgres"—and the mental model that underlies it all

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Bryn Llewellyn <bryn(at)yugabyte(dot)com>, "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: Ian Lawrence Barwick <barwick(at)gmail(dot)com>, pgsql-general list <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Seeking the correct term of art for the (unique) role that is usually called "postgres"—and the mental model that underlies it all
Date: 2022-10-28 00:51:49
Message-ID: e75abfa8-72af-701c-cf6f-5336a1a35c92@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 10/27/22 17:20, Bryn Llewellyn wrote:
>> david(dot)g(dot)johnston(at)gmail(dot)com <mailto:david(dot)g(dot)johnston(at)gmail(dot)com> wrote:
>>
>>> bryn(at)yugabyte(dot)com <mailto:bryn(at)yugabyte(dot)com> wrote:
>>>
>>> The fact that the "bootstrap superuser" term of art denotes a
>>> matching pair of two principals (an O/S user and a within-cluster role)
>>
>> No, it does not.  It denotes only the PostgreSQL role.  "service user"
>> is probably a better term for the O/S side of things.  Though,
>> frankly, aside from trying to distinguish things when talking about
>> logging in, the necessity to even care about the O/S user is fairly
>> minimal.
>>
>> [about your "usr" example] just create a database named "usr" and you
>> won't get the "database usr not found" error message anymore and
>> the login will succeed.
>
> Thank you very much David. The scales have now finally fallen from my
> eyes. I know now that in order to be able to start a client session from
> the O/S of the machine where the PG software and cluster live, without
> needing to supply a password even when "pg_hba.conf" asks for password
> authentication, it's sufficient to do this (using my "usr" example):
>
> (0) Simply leave the regime in place where the catalog-owning role is
> called "postgres" and the cluster's data files and other config files
> are owned by postgres.
>
> (1) create a new database role thus (where "password null" is just so
> that I can prove a point here):
>
> create role usr with login password null;
>
> (2) Add this line under the existing final comment in the shipped copy
> of "pg_ident.conf" thus:
>
> # MAPNAME       SYSTEM-USERNAME         PG-USERNAME
> usr             usr                     usr          # Added by Bryn
>
> (It seems that I could set the first field of this line to "dog"—but I
> won't test that.

The above is not contributing to the below(pg_hba.conf) and would be
redundant any way as it just says OS user usr = Pg user usr and peer
means that anyway. The purpose of mapping would be to do something like
map OS user foo to PG user usr.

References:

https://www.postgresql.org/docs/current/auth-peer.html

"map

Allows for mapping between system and database user names. See
Section 21.2 for details.
"

Section 21.2

"The map-name is an arbitrary name that will be used to refer to this
mapping in pg_hba.conf."

This example below id for the ident auth method but the same syntax
applies to peer.

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.0.0/16 ident
map=omicron

>
> (3) Add this line between the existing two in the shipped copy of
> "pg_hba.conf" thus:
>
> local   all             postgres                                peer #
> See the essay at the start.
> local   all             usr                                     peer #
> Added by Bryn
> local   all             all                                     peer

As noted above your pg_ident.conf will not do anything for the above. It
will work though if you are logged in as OS user usr as it will connect
as PG user usr.

>
> (My copy of this file specifies "md5" and not "trust".)
>
> I'd've thought that "all" would mean any O/S user existing, or
> yet-to-be-created. But the comment in the shipped "pg_hba.conf" says this:
>
> # If you change this first entry you will need to make sure that the
> # database superuser can access the database using some other method.
> ...
> # Database administrative login by Unix domain socket
> local   all             postgres                                peer
>
> (So two terms for the one notion just a couple of lines apart!) I'll do
> the empirical test presently. Anyway, with these conditions met, I can
> "su usr" and then start a session like this:
>
> psql -d postgres
>
> Yes, your point about what artifacts exist the moment after "initdb"
> finishes is taken. So I finished my test by (after authorizing as
> "postgres") creating a database "usr" and granting "connect" on it to
> "usr".) Then I could create a new session from the O/S prompt when
> "whoami" shows "user" with the bare "psql"—just as I could the moment
> after the PG install finished from the O/S prompt when "whoami" shows
> "postgres".
>
> I did think that I'd tried all this at the outset. But clearly I must've
> missed one of those steps or done a typo.
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message David G. Johnston 2022-10-28 02:47:17 Re: Re: Seeking the correct term of art for the (unique) role that is usually called "postgres"—and the mental model that underlies it all
Previous Message Bryn Llewellyn 2022-10-28 00:41:40 Re: Seeking the correct term of art for the (unique) role that is usually called "postgres"—and the mental model that underlies it all