Re: [GENERAL] Access privileges /yyyy -- role that granted thisprivilege. - Mailing list pgsql-general

From Adrian Klaver
Subject Re: [GENERAL] Access privileges /yyyy -- role that granted thisprivilege.
Date
Msg-id 6433a2c8-d2b5-76be-9cd6-cf3304381311@aklaver.com
Whole thread Raw
In response to [GENERAL] Access privileges /yyyy -- role that granted this privilege.  (Jean-Michel Scheiwiler <jm.scheiwiler@gmail.com>)
Responses Re: [GENERAL] Access privileges /yyyy -- role that granted this privilege.  (Jean-Michel Scheiwiler <jm.scheiwiler@gmail.com>)
List pgsql-general
On 02/17/2017 05:44 AM, Jean-Michel Scheiwiler wrote:
> Hello,
>
> I delve into access privileges and I have a problem (or a
> miscomprehension) when i type \l, \dn+ or \dp with the /yyyy "role that
> granted this privilege"  part.
>
> ( https://www.postgresql.org/docs/current/static/sql-grant.html )
>
> \l for instance
>
> [postgres:~]$psql
> psql (9.6.2)
> Type "help" for help.
>
> postgres=# create role superman login superuser;
> CREATE ROLE
> postgres=# create role user01 login ;
> CREATE ROLE
> postgres=# create role user02 login ;
> CREATE ROLE
> postgres=# create database db001;
> CREATE DATABASE
> postgres=# \l db001
>                               List of databases
>  Name  |  Owner   | Encoding |   Collate   |    Ctype    | Access
> privileges
> -------+----------+----------+-------------+-------------+-------------------
>  db001 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
> (1 row)
>
> postgres=# grant connect on database db001 to user01 ;
> GRANT
> postgres=# \l db001
>                                 List of databases
>  Name  |  Owner   | Encoding |   Collate   |    Ctype    |   Access
> privileges
> -------+----------+----------+-------------+-------------+-----------------------
>  db001 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres
>         +
>        |          |          |             |             |
> postgres=CTc/postgres+
>        |          |          |             |             | user01=c/postgres
> (1 row)
>
> postgres=# \q
> [postgres:~]$psql -U superman postgres
> psql (9.6.2)
> Type "help" for help.
>
> postgres=# grant connect on database db001 to user02;
> GRANT
> postgres=# \l db001
>                                 List of databases
>  Name  |  Owner   | Encoding |   Collate   |    Ctype    |   Access
> privileges
> -------+----------+----------+-------------+-------------+-----------------------
>  db001 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres
>         +
>        |          |          |             |             |
> postgres=CTc/postgres+
>        |          |          |             |             |
> user01=c/postgres    +
>        |          |          |             |             | user02=c/postgres
> (1 row)
>
>
> I thought i would get   user02=c/superman but instead i
> get user02=c/postgres => I don't get the "role that granted this
> privilege" but i get the owner of the database.

As a practical matter it does not matter as postgres and superman are
both superusers, still for an explanation of why it happens:

https://www.postgresql.org/docs/9.6/static/sql-grant.html

"If a superuser chooses to issue a GRANT or REVOKE command, the command
is performed as though it were issued by the owner of the affected
object. In particular, privileges granted via such a command will appear
to have been granted by the object owner. (For role membership, the
membership appears to have been granted by the containing role itself.)"

>
> The problem is the same with schemas or tables access privileges.
>
> Can you help me figure this out ?

What are you trying to achieve?

>
> Thank you in advance
>
> Jean-Michel Scheiwiler


--
Adrian Klaver
adrian.klaver@aklaver.com


pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: [GENERAL] Load multiple CSV file in Postgres using COPY
Next
From: Jean-Michel Scheiwiler
Date:
Subject: Re: [GENERAL] Access privileges /yyyy -- role that granted this privilege.