diff options
Diffstat (limited to 'src/backend/commands/lockcmds.c')
-rw-r--r-- | src/backend/commands/lockcmds.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/backend/commands/lockcmds.c b/src/backend/commands/lockcmds.c index 99e68bff85d..410d78b040f 100644 --- a/src/backend/commands/lockcmds.c +++ b/src/backend/commands/lockcmds.c @@ -292,16 +292,16 @@ LockTableAclCheck(Oid reloid, LOCKMODE lockmode, Oid userid) AclResult aclresult; AclMode aclmask; - /* Verify adequate privilege */ - if (lockmode == AccessShareLock) - aclmask = ACL_SELECT; - else if (lockmode == RowExclusiveLock) - aclmask = ACL_INSERT | ACL_UPDATE | ACL_DELETE | ACL_TRUNCATE; - else - aclmask = ACL_UPDATE | ACL_DELETE | ACL_TRUNCATE; + /* any of these privileges permit any lock mode */ + aclmask = ACL_MAINTAIN | ACL_UPDATE | ACL_DELETE | ACL_TRUNCATE; + + /* SELECT privileges also permit ACCESS SHARE and below */ + if (lockmode <= AccessShareLock) + aclmask |= ACL_SELECT; - /* MAINTAIN privilege allows all lock modes */ - aclmask |= ACL_MAINTAIN; + /* INSERT privileges also permit ROW EXCLUSIVE and below */ + if (lockmode <= RowExclusiveLock) + aclmask |= ACL_INSERT; aclresult = pg_class_aclcheck(reloid, userid, aclmask); |