Re: [BUGS] BUG #14788: `pg_restore -c` won't restore schema accessprivileges. - Mailing list pgsql-bugs

From Fujimoto Seiji
Subject Re: [BUGS] BUG #14788: `pg_restore -c` won't restore schema accessprivileges.
Date
Msg-id 20170823140058.2ojn2ajcamd43s76@holly
Whole thread Raw
In response to [BUGS] BUG #14788: `pg_restore -c` won't restore schema access privileges.  (fujimoto@ceptord.net)
Responses Re: [BUGS] BUG #14788: `pg_restore -c` won't restore schema access privileges.
List pgsql-bugs
Thanks! That discussion thread is very informative.

My understanding is:
 1. By default, a newly created schema has an empty ACL. It means    that normal users cannot access it without
permissiongranted    explicitly.    2. However, "public" schema has special semantics; It gets created    with
permissiveACL so that anyone can access it.
 
 3. Since 9.6, pg_dump stops to output this "special" privilege part    to the dump (for some internal reasons). 9.6.3
triesto fix this    issue by patching `pg_dump -c` behavior.
 

Although I'm not so sure that the current behavior ("-c option affects
'custom' format dumps") is intended one, it seems we can reasonably
work around this issue.

So thanks for the response. It really was a lot of help.

On Wed, Aug 23, 2017 at 05:06:43PM +0900, Masahiko Sawada wrote:
> On Mon, Aug 21, 2017 at 7:44 PM,  <fujimoto@ceptord.net> wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference:      14788
> > Logged by:          Fujimoto Seiji
> > Email address:      fujimoto@ceptord.net
> > PostgreSQL version: 9.6.4
> > Operating system:   Linux 4.9.0 (Debian 9.1)
> > Description:
> >
> > ## How to reproduce
> >
> > 1. Create a new database:
> >
> >     $ createdb --template=template0 test
> >     $ psql -c '\dn+' test
> >                           list of schemas
> >       name  |  owner   |  access privileges   |      description
> >     --------+----------+----------------------+------------------------
> >      public | postgres | postgres=uc/postgres+| standard public schema
> >             |          | =uc/postgres         |
> >     (1 row)
> >
> > 2. pg_dump the database with 'custom' format:
> >
> >     $ pg_dump -Fc -f test.dump test
> >
> > 3. Restore the dump with '-c' option:
> >
> >     $ pg_restore -c -d test test.dump
> >
> >
> > ## Bug/Problem
> >
> > Now all the access privileges on the public schema are gone:
> >
> >     $ psql -c '\dn+' test
> >                             List of schemas
> >       Name  |  Owner   | Access privileges |      Description
> >     --------+----------+-------------------+------------------------
> >      public | postgres |                   | standard public schema
> >     (1 row)
> >
> >
> > ## Expected behabior
> >
> > Granted privileges gets restored correctly.
> >
> >
> > ## Additional notes
> >
> > Interestingly, if the database has been dumped with '-c' option,
> > pg_restore
> > will restore the schema privileges correctly.
> >
> >     $ createdb --template=template0 test
> >     $ pg_dump  -Fc -c -f test.dump
> >     $ pg_restore -c -d test test.dump
> >     $ psql -c '\dn+' test
> >                               List of schemas
> >       Name  |  Owner   |  Access privileges   |      Description
> >     --------+----------+----------------------+------------------------
> >      public | postgres | postgres=UC/postgres+| standard public schema
> >             |          | =UC/postgres         |
> >     (1 row)
> >
> > (I do not understand why '-c' option affects the custom format dump.
> > This behaviour itself contradicts what the documentation states)
> >
> >> -c
> >> --clean
> >>
> >> ...
> >> This option is only meaningful for the plain-text format. For the
> > archive
> >> formats, you can specify the option when you call pg_restore.
> >>
> >> https://www.postgresql.org/docs/9.6/static/app-pgdump.html
> >
> 
> I think it's not a bug. This behavior is introduced in PostgreSQL
> 9.6.3 by a discussion[1]. For the reason, please see PostgreSQL 9.6.3
> release note[2].
> 
> ----
> Fix pg_dump/pg_restore to correctly handle privileges for the public
> schema when using --clean option (Stephen Frost)
>    Other schemas start out with no privileges granted, but public does
> not; this requires special-case treatment when it is dropped and
> restored due to the --clean option.
> ----
> 
> [1] https://www.postgresql.org/message-id/3534542.o3cNaKiDID%40techfox
> [2] https://www.postgresql.org/docs/current/static/release-9-6-3.html
> 
> Regards,
> 
> --
> Masahiko Sawada
> NIPPON TELEGRAPH AND TELEPHONE CORPORATION
> NTT Open Source Software Center


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

pgsql-bugs by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: [BUGS] BUG #14785: Logical replication does not work after addinga column. Bug?
Next
From: Andres Freund
Date:
Subject: Re: [BUGS] BUG #14785: Logical replication does not work afteradding a column. Bug?