Re: running logical replication as the subscription owner
Ajin Cherian <itsajin@gmail.com>
From: Ajin Cherian <itsajin@gmail.com>
To: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Robert Haas <robertmhaas@gmail.com>, Noah Misch <noah@leadboat.com>, Jeff Davis <pgsql@j-davis.com>, Jelte Fennema <postgres@jeltef.nl>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>,
Andres Freund <andres@anarazel.de>
Date: 2023-05-23T11:55:48Z
Lists: pgsql-hackers
On Mon, May 22, 2023 at 10:36 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > On Wed, May 17, 2023 at 10:10 AM Ajin Cherian <itsajin@gmail.com> wrote: > > > > On Mon, May 15, 2023 at 10:47 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > > > > > On Mon, May 15, 2023 at 5:44 PM Ajin Cherian <itsajin@gmail.com> wrote: > > > > > > > > On Fri, May 12, 2023 at 9:55 PM Ajin Cherian <itsajin@gmail.com> wrote: > > > > > > > > > > If nobody else is working on this, I can come up with a patch to fix this > > > > > > > > > > > > > Attaching a patch which attempts to fix this. > > > > > > > > > > Thank you for the patch! I think we might want to have tests for it. > > > > > I have updated the patch with a test case as well. > > Thank you for updating the patch! Here are review comments: > > + /* > + * Make sure that the copy command runs as the table owner, unless > + * the user has opted out of that behaviour. > + */ > + run_as_owner = MySubscription->runasowner; > + if (!run_as_owner) > + SwitchToUntrustedUser(rel->rd_rel->relowner, &ucxt); > + > /* Now do the initial data copy */ > PushActiveSnapshot(GetTransactionSnapshot()); > > I think we should switch users before the acl check in > LogicalRepSyncTableStart(). > > --- > +# Create a trigger on table alice.unpartitioned that writes > +# to a table that regress_alice does not have permission. > +$node_subscriber->safe_psql( > + 'postgres', qq( > +SET SESSION AUTHORIZATION regress_alice; > +CREATE OR REPLACE FUNCTION alice.alice_audit() > +RETURNS trigger AS > +\$\$ > + BEGIN > + insert into public.admin_audit values(2); > + RETURN NEW; > + END; > +\$\$ > +LANGUAGE 'plpgsql'; > +CREATE TRIGGER ALICE_TRIGGER AFTER INSERT ON alice.unpartitioned FOR EACH ROW > +EXECUTE PROCEDURE alice.alice_audit(); > +ALTER TABLE alice.unpartitioned ENABLE ALWAYS TRIGGER ALICE_TRIGGER; > +)); > > While this approach works, I'm not sure we really need a trigger for > this test. I've attached a patch for discussion that doesn't use > triggers for the regression tests. We create a new subscription owned > by a user who doesn't have the permission to the target table. The > test passes only if run_as_owner = true works. > this is better, thanks. Since you are testing run_as_owner = false behaviour during table copy phase, you might as well add a test case that it correctly behaves during insert replication as well. regards, Ajin Cherian Fujitsu Australia
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Honor run_as_owner option in tablesync worker.
- a83edeaf684a 16.0 landed
-
Document new pg_subscription columns.
- bc25d6c54a00 16.0 landed
-
Add a run_as_owner option to subscriptions.
- 482675987bcd 16.0 landed
-
Perform logical replication actions as the table owner.
- 1e10d49b65d6 16.0 landed
-
Add new predefined role pg_create_subscription.
- c3afe8cf5a1e 16.0 cited
-
Respect permissions within logical replication.
- a2ab9c06ea15 15.0 cited
-
Empty search_path in logical replication apply worker and walsender.
- 11da97024abb 14.0 cited
-
Empty search_path in Autovacuum and non-psql/pgbench clients.
- 582edc369cdb 11.0 cited