pgsql: Remove the ability of a role to administer itself. - Mailing list pgsql-committers

From Robert Haas
Subject pgsql: Remove the ability of a role to administer itself.
Date
Msg-id E1nYu8r-001n7w-RG@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Remove the ability of a role to administer itself.

Commit f9fd1764615ed5d85fab703b0ffb0c323fe7dfd5 effectively gave
every role ADMIN OPTION on itself. However, this appears to be
something that happened accidentally as a result of refactoring
work rather than an intentional decision. Almost a decade later,
it was discovered that this was a security vulnerability. As a
result, commit fea164a72a7bfd50d77ba5fb418d357f8f2bb7d0 restricted
this implicit ADMIN OPTION privilege to be exercisable only when
the role being administered is the same as the session user and
when no security-restricted operation is in progress. That
commit also documented the existence of this implicit privilege
for what seems to be the first time.

The effect of the privilege is to allow a login role to grant
the privileges of that role, and optionally ADMIN OPTION on it,
to some other role. That's an unusual thing to do, because generally
membership is granted in roles used as groups, rather than roles
used as users. Therefore, it does not seem likely that removing
the privilege will break things for many PostgreSQL users.

However, it will make it easier to reason about the permissions
system. This is the only case where a user who has not been given any
special permission (superuser, or ADMIN OPTION on some role) can
modify role membership, so removing it makes things more consistent.
For example, if a superuser sets up role A and B and grants A to B
but no other privileges to anyone, she can now be sure that no one
else will be able to revoke that grant. Without this change, that
would have been true only if A was a non-login role.

Patch by me. Reviewed by Tom Lane and Stephen Frost.

Discussion: http://postgr.es/m/CA+Tgmoawdt03kbA+dNyBcNWJpRxu0f4X=69Y3+DkXXZqmwMDLg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/79de9842ab03259325ee4055fb0a7ebd2e4372ff

Modified Files
--------------
doc/src/sgml/ref/grant.sgml              |  9 ++++----
src/backend/commands/user.c              |  5 -----
src/backend/utils/adt/acl.c              | 38 ++------------------------------
src/test/regress/expected/privileges.out |  8 +------
src/test/regress/sql/privileges.sql      |  6 +----
5 files changed, 8 insertions(+), 58 deletions(-)


pgsql-committers by date:

Previous
From: Robert Haas
Date:
Subject: pgsql: Fix a few goofs in new backup compression code.
Next
From: Joe Conway
Date:
Subject: pgsql: Use has_privs_for_roles for predefined role checks