Re: Orphaned users in PG16 and above can only be managed by Superusers

From: Nathan Bossart <nathandbossart(at)gmail(dot)com>
To: Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, Andres Freund <andres(at)anarazel(dot)de>, Tomas Vondra <tomas(at)vondra(dot)me>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Orphaned users in PG16 and above can only be managed by Superusers
Date: 2025-03-10 15:01:13
Message-ID: Z87-udp8tjjR8FmT@nathan
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Mar 10, 2025 at 11:15:04AM +0530, Ashutosh Sharma wrote:
> On Fri, Mar 7, 2025 at 10:55 PM Nathan Bossart <nathandbossart(at)gmail(dot)com> wrote:
>> I noticed that much of this code is lifted from DropRole(), and the new
>> check_drop_role_dependency() function is only used by DropRole() right
>> before it does the exact same scans. Couldn't we put the new dependency
>> detection in those existing scans in DropRole()?
>
> It can be done, but mixing the code that checks for the drop role
> dependency with the code that removes entries for the role being
> dropped from pg_auth_members could reduce clarity and precision. This
> is more of a sanity check which I felt was necessary before we proceed
> with actually dropping the role, starting with the deletion of drop
> role entries from the system catalogs. I’m aware there’s some code
> duplication, but I think it should be fine.

Looking closer, we probably need to move this check to the second pass,
anyway:

postgres=# CREATE ROLE a CREATEROLE;
CREATE ROLE
postgres=# SET ROLE a;
SET
postgres=> CREATE ROLE b CREATEROLE;
CREATE ROLE
postgres=> SET ROLE b;
SET
postgres=> CREATE ROLE c;
CREATE ROLE
postgres=> RESET ROLE;
RESET
postgres=# DROP ROLE b, c;
ERROR: role "b" cannot be dropped because some objects depend on it
DETAIL: role a inherits ADMIN privileges on role c through role b
postgres=# DROP ROLE c, b;
DROP ROLE

The first DROP ROLE should probably succeed, if for no other reason than
individually dropping role c followed by role b would succeed.

--
nathan

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tomas Vondra 2025-03-10 15:01:35 Re: Changing the state of data checksums in a running cluster
Previous Message Bertrand Drouvot 2025-03-10 14:52:42 Re: [BUG]: the walsender does not update its IO statistics until it exits