Thread: Remove duplicates of membership from results of \du

Remove duplicates of membership from results of \du

From
Shinya Kato
Date:
Hi, hackers

When executing \du, you can see duplicates of the same role in 'member of'.
This happens when admin | inherit | set options are granted by another role.

---
postgres=# create role role_a login createrole;
CREATE ROLE
postgres=# \du
                                    List of roles
  Role name | Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
  role_a    | Create role                                                
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=# set role role_a;
SET
postgres=> create role role_b;
CREATE ROLE
postgres=> \du
                                    List of roles
  Role name | Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
  role_a    | Create role                                                
| {role_b}
  role_b    | Cannot login                                               
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=> grant role_b to role_a;
GRANT ROLE
postgres=> \du
                                       List of roles
  Role name | Attributes                         |    Member of
-----------+------------------------------------------------------------+-----------------
  role_a    | Create role                                                
| {role_b,role_b}
  role_b    | Cannot login                                               
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=> select rolname, oid from pg_roles where rolname = 'role_b';
  rolname |  oid
---------+-------
  role_b  | 16401
(1 row)

postgres=> select * from pg_auth_members where roleid = 16401;
   oid  | roleid | member | grantor | admin_option | inherit_option | 
set_option
-------+--------+--------+---------+--------------+----------------+------------
  16402 |  16401 |  16400 |      10 | t            | f | f
  16403 |  16401 |  16400 |   16400 | f            | t | t
(2 rows)
---


Attached patch resolves this issue.
Do you think?

Regards,
Shinya Kato




Attachment

Re: Remove duplicates of membership from results of \du

From
"David G. Johnston"
Date:
On Sat, May 6, 2023 at 6:37 AM Shinya Kato <Shinya11.Kato@oss.nttdata.com> wrote:
Hi, hackers

When executing \du, you can see duplicates of the same role in 'member of'.
This happens when admin | inherit | set options are granted by another role.

There is already an ongoing patch discussing the needed changes to psql \du because of this change in tracking membership grant attributes.


David J.