RE: New predefined roles- 'pg_read/write_all_data' - Mailing list pgsql-hackers

From Shinoda, Noriyoshi (PN Japan FSIP)
Subject RE: New predefined roles- 'pg_read/write_all_data'
Date
Msg-id TU4PR8401MB1152BA393608454D212BEE2FEED19@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM
Whole thread Raw
In response to Re: New predefined roles- 'pg_read/write_all_data'  (Stephen Frost <sfrost@snowman.net>)
Responses Re: New predefined roles- 'pg_read/write_all_data'  (Stephen Frost <sfrost@snowman.net>)
List pgsql-hackers
Hi hackers,

I have tested this new feature with PostgreSQL 14 Beta 3 environment.
I created a user granted with pg_write_all_data role and executed UPDATE and DELETE statements on tables owned by other
users.
If there is no WHERE clause, it can be executed as expected, but if the WHERE clause is specified, an error of
permissiondenied will occur. 
Is this the expected behavior?
The WHERE clause is not specified in the regression test (privileges.sql).

Below is the execution log.
------------------------------------------------
postgres=# CREATE USER owner1 PASSWORD 'owner1';
CREATE ROLE
postgres=# CREATE USER write1 PASSWORD 'write1';
CREATE ROLE
postgres=# GRANT pg_write_all_data TO write1;
GRANT ROLE
postgres=# SET SESSION AUTHORIZATION owner1;
SET
postgres=> CREATE TABLE data1(c1 INT, c2 VARCHAR(10));
CREATE TABLE
postgres=> INSERT INTO data1 VALUES (generate_series(1, 10), 'data1');
INSERT 0 10
postgres=> SET SESSION AUTHORIZATION write1;
SET
postgres=> INSERT INTO data1 VALUES (0, 'data1');    -- success
INSERT 0 1
postgres=> UPDATE data1 SET c2='update' WHERE c1=0;    -- fail
ERROR:  permission denied for table data1
postgres=> DELETE FROM data1 WHERE c1=0;    -- fail
ERROR:  permission denied for table data1
postgres=> UPDATE data1 SET c2='update';    -- success
UPDATE 11
postgres=> DELETE FROM data1;    -- success
DELETE 11
postgres=> SELECT version();
                                                  version
------------------------------------------------------------------------------------------------------------
 PostgreSQL 14beta3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
-------------

Regards,
Noriyoshi Shinoda

-----Original Message-----
From: Stephen Frost [mailto:sfrost@snowman.net]
Sent: Saturday, August 28, 2021 7:34 AM
To: Michael Banck <michael.banck@credativ.de>
Cc: gkokolatos@pm.me; Anastasia Lubennikova <a.lubennikova@postgrespro.ru>; pgsql-hackers@lists.postgresql.org
Subject: Re: New predefined roles- 'pg_read/write_all_data'

Greetings,

* Michael Banck (michael.banck@credativ.de) wrote:
> On Thu, Apr 01, 2021 at 04:00:06PM -0400, Stephen Frost wrote:
> > diff --git a/doc/src/sgml/user-manag.sgml
> > b/doc/src/sgml/user-manag.sgml index d171b13236..fe0bdb7599 100644
> > --- a/doc/src/sgml/user-manag.sgml
> > +++ b/doc/src/sgml/user-manag.sgml
> > @@ -518,6 +518,24 @@ DROP ROLE doomed_role;
> >        </row>
> >       </thead>
> >       <tbody>
> > +      <row>
> > +       <entry>pg_read_all_data</entry>
> > +       <entry>Read all data (tables, views, sequences), as if having SELECT
> > +       rights on those objects, and USAGE rights on all schemas, even without
> > +       having it explicitly.  This role does not have the role attribute
> > +       <literal>BYPASSRLS</literal> set.  If RLS is being used, an administrator
> > +       may wish to set <literal>BYPASSRLS</literal> on roles which this role is
> > +       GRANTed to.</entry>
> > +      </row>
> > +      <row>
> > +       <entry>pg_write_all_data</entry>
> > +       <entry>Write all data (tables, views, sequences), as if having INSERT,
> > +       UPDATE, and DELETE rights on those objects, and USAGE rights on all
> > +       schemas, even without having it explicitly.  This role does not have the
> > +       role attribute <literal>BYPASSRLS</literal> set.  If RLS is being used,
> > +       an administrator may wish to set <literal>BYPASSRLS</literal> on roles
> > +       which this role is GRANTed to.</entry>
> > +      </row>
>
> Shouldn't those "SELECT", "INSERT" etc. be wrapped in <command> tags?

Yeah, good point, fixed.

Thanks!

Stephen



pgsql-hackers by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: [Proposal] Fully WAL logged CREATE DATABASE - No Checkpoints
Next
From: Stephen Frost
Date:
Subject: Re: New predefined roles- 'pg_read/write_all_data'