RE: Non-superuser subscription owners
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
From: "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Andres Freund <andres@anarazel.de>, Mark Dilger <mark.dilger@enterprisedb.com>, Amit Kapila <amit.kapila16@gmail.com>, Andrew
Dunstan <andrew@dunslane.net>, PostgreSQL-development <pgsql-hackers@postgresql.org>, Jeff Davis <pgsql@j-davis.com>
Date: 2023-04-01T01:24:05Z
Lists: pgsql-hackers
On Saturday, April 1, 2023 4:00 AM Robert Haas <robertmhaas@gmail.com> Hi, > > On Thu, Mar 30, 2023 at 9:49 PM houzj.fnst@fujitsu.com > <houzj.fnst@fujitsu.com> wrote: > > It looks like the super user check is out of a transaction, I haven't > > checked why it only failed on one BF animal, but it seems we can put > > the check into the transaction like the following: > > That looks like a reasonable fix but I can't reproduce the problem locally. I > thought the reason why that machine sees the problem might be that it uses > -DRELCACHE_FORCE_RELEASE, but I tried that option here and the tests still pass. > Anyone ideas how to reproduce? I think it's a timing problem because superuser_arg() function will cache the roleid that passed in last time, so it might not search the syscache to hit the Assert() check each time. And in the regression test, the roleid cache happened to be invalidated before the superuser_arg() by some concurrently ROLE change( maybe in subscription.sql and publication.sql). I can reproduce it by using gdb and starting another session to change the ROLE. When the apply worker starts, use the gdb to block the apply worker in the transaction before the super user check. Then start another session to ALTER ROLE to invalidate the roleid cache in superuser_arg() which will cause the apply worker to search the syscache and hit the Assert(). -- origin_startpos = replorigin_session_get_progress(false); B* CommitTransactionCommand(); /* Is the use of a password mandatory? */ must_use_password = MySubscription->passwordrequired && ! superuser_arg(MySubscription->owner); -- Best Regards, Hou zj
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix possible crash in tablesync worker.
- b5c517379a40 16.0 landed
-
Display 'password_required' option for \dRs+ command.
- 19e65dff38bd 16.0 landed
-
Restart the apply worker if the 'password_required' option is changed.
- c1cc4e688b60 16.0 landed
-
Fix possible logical replication crash.
- e7e7da2f8d57 16.0 landed
-
Add new predefined role pg_create_subscription.
- c3afe8cf5a1e 16.0 landed
-
Expand AclMode to 64 bits
- 7b378237aa80 16.0 cited
-
More cleanup of a2ab9c06ea.
- 96a6f11c0625 15.0 landed
-
Respect permissions within logical replication.
- a2ab9c06ea15 15.0 landed
-
Improve table locking behavior in the face of current DDL.
- 2ad36c4e44c8 9.2.0 cited