mirror of
https://github.com/postgres/postgres.git
synced 2025-09-11 00:12:06 +03:00
Remove redundant privilege check from pg_sequences system view.
This commit adjusts pg_sequence_last_value() to return NULL instead of ERROR-ing for sequences for which the current user lacks privileges. This allows us to remove the call to has_sequence_privilege() in the definition of the pg_sequences system view. Bumps catversion. Suggested-by: Michael Paquier Reviewed-by: Michael Paquier, Tom Lane Discussion: https://postgr.es/m/20240501005730.GA594666%40nathanxps13
This commit is contained in:
@@ -1790,21 +1790,17 @@ pg_sequence_last_value(PG_FUNCTION_ARGS)
|
||||
/* open and lock sequence */
|
||||
init_sequence(relid, &elm, &seqrel);
|
||||
|
||||
if (pg_class_aclcheck(relid, GetUserId(), ACL_SELECT | ACL_USAGE) != ACLCHECK_OK)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("permission denied for sequence %s",
|
||||
RelationGetRelationName(seqrel))));
|
||||
|
||||
/*
|
||||
* We return NULL for other sessions' temporary sequences. The
|
||||
* pg_sequences system view already filters those out, but this offers a
|
||||
* defense against ERRORs in case someone invokes this function directly.
|
||||
*
|
||||
* Also, for the benefit of the pg_sequences view, we return NULL for
|
||||
* unlogged sequences on standbys instead of throwing an error.
|
||||
* unlogged sequences on standbys and for sequences for which the current
|
||||
* user lacks privileges instead of throwing an error.
|
||||
*/
|
||||
if (!RELATION_IS_OTHER_TEMP(seqrel) &&
|
||||
if (pg_class_aclcheck(relid, GetUserId(), ACL_SELECT | ACL_USAGE) == ACLCHECK_OK &&
|
||||
!RELATION_IS_OTHER_TEMP(seqrel) &&
|
||||
(RelationIsPermanent(seqrel) || !RecoveryInProgress()))
|
||||
{
|
||||
Buffer buf;
|
||||
|
Reference in New Issue
Block a user