mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Fix a problem with parallel workers being unable to restore role.
check_role() tries to verify that the user has permission to become the
requested role, but this is inappropriate in a parallel worker, which
needs to exactly recreate the master's authorization settings. So skip
the check in that case.
This fixes a bug in commit 924bcf4f16
.
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
#include <ctype.h>
|
||||
|
||||
#include "access/htup_details.h"
|
||||
#include "access/parallel.h"
|
||||
#include "access/xact.h"
|
||||
#include "access/xlog.h"
|
||||
#include "catalog/pg_authid.h"
|
||||
@ -877,9 +878,12 @@ check_role(char **newval, void **extra, GucSource source)
|
||||
ReleaseSysCache(roleTup);
|
||||
|
||||
/*
|
||||
* Verify that session user is allowed to become this role
|
||||
* Verify that session user is allowed to become this role, but
|
||||
* skip this in parallel mode, where we must blindly recreate the
|
||||
* parallel leader's state.
|
||||
*/
|
||||
if (!is_member_of_role(GetSessionUserId(), roleid))
|
||||
if (!InitializingParallelWorker &&
|
||||
!is_member_of_role(GetSessionUserId(), roleid))
|
||||
{
|
||||
GUC_check_errcode(ERRCODE_INSUFFICIENT_PRIVILEGE);
|
||||
GUC_check_errmsg("permission denied to set role \"%s\"",
|
||||
|
Reference in New Issue
Block a user