v20-0005-Adding-ACL-checks-for-verify_heapam.patch
application/octet-stream
Filename: v20-0005-Adding-ACL-checks-for-verify_heapam.patch
Type: application/octet-stream
Part: 4
Message:
Re: new heapcheck contrib module
Patch
Format: format-patch
Series: patch v20-0005
Subject: Adding ACL checks for verify_heapam
| File | + | − |
|---|---|---|
| contrib/amcheck/expected/check_heap.out | 6 | 0 |
| contrib/amcheck/sql/check_heap.sql | 7 | 0 |
| contrib/amcheck/verify_heapam.c | 8 | 0 |
| doc/src/sgml/pgamcheck.sgml | 1 | 1 |
From e8116cff947a4a7dedf1fcf9c7d0b4b87b796237 Mon Sep 17 00:00:00 2001
From: Mark Dilger <mark.dilger@enterprisedb.com>
Date: Wed, 21 Oct 2020 20:27:23 -0700
Subject: [PATCH v20 5/5] Adding ACL checks for verify_heapam
Requiring select privileges tables scanned by verify_heapam, in
addition to the already required execute privileges on the function.
---
contrib/amcheck/expected/check_heap.out | 6 ++++++
contrib/amcheck/sql/check_heap.sql | 7 +++++++
contrib/amcheck/verify_heapam.c | 8 ++++++++
doc/src/sgml/pgamcheck.sgml | 2 +-
4 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/contrib/amcheck/expected/check_heap.out b/contrib/amcheck/expected/check_heap.out
index 882f853d56..41cdc6435c 100644
--- a/contrib/amcheck/expected/check_heap.out
+++ b/contrib/amcheck/expected/check_heap.out
@@ -95,6 +95,12 @@ SELECT * FROM verify_heapam(relation := 'heaptest');
ERROR: permission denied for function verify_heapam
RESET ROLE;
GRANT EXECUTE ON FUNCTION verify_heapam(regclass, boolean, boolean, text, bigint, bigint) TO regress_heaptest_role;
+-- verify permissions are checked (error due to no select privileges on relation)
+SET ROLE regress_heaptest_role;
+SELECT * FROM verify_heapam(relation := 'heaptest');
+ERROR: permission denied for table heaptest
+RESET ROLE;
+GRANT SELECT ON heaptest TO regress_heaptest_role;
-- verify permissions are now sufficient
SET ROLE regress_heaptest_role;
SELECT * FROM verify_heapam(relation := 'heaptest');
diff --git a/contrib/amcheck/sql/check_heap.sql b/contrib/amcheck/sql/check_heap.sql
index c10a25f21c..c8397a46f0 100644
--- a/contrib/amcheck/sql/check_heap.sql
+++ b/contrib/amcheck/sql/check_heap.sql
@@ -41,6 +41,13 @@ RESET ROLE;
GRANT EXECUTE ON FUNCTION verify_heapam(regclass, boolean, boolean, text, bigint, bigint) TO regress_heaptest_role;
+-- verify permissions are checked (error due to no select privileges on relation)
+SET ROLE regress_heaptest_role;
+SELECT * FROM verify_heapam(relation := 'heaptest');
+RESET ROLE;
+
+GRANT SELECT ON heaptest TO regress_heaptest_role;
+
-- verify permissions are now sufficient
SET ROLE regress_heaptest_role;
SELECT * FROM verify_heapam(relation := 'heaptest');
diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c
index a42b74ed46..2cb735f576 100644
--- a/contrib/amcheck/verify_heapam.c
+++ b/contrib/amcheck/verify_heapam.c
@@ -23,6 +23,7 @@
#include "miscadmin.h"
#include "storage/bufmgr.h"
#include "storage/procarray.h"
+#include "utils/acl.h"
#include "utils/builtins.h"
#include "utils/fmgroids.h"
@@ -434,6 +435,8 @@ verify_heapam(PG_FUNCTION_ARGS)
static void
sanity_check_relation(Relation rel)
{
+ AclResult aclresult;
+
if (rel->rd_rel->relkind != RELKIND_RELATION &&
rel->rd_rel->relkind != RELKIND_MATVIEW &&
rel->rd_rel->relkind != RELKIND_TOASTVALUE)
@@ -445,6 +448,11 @@ sanity_check_relation(Relation rel)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("only heap AM is supported")));
+ aclresult = pg_class_aclcheck(rel->rd_id, GetUserId(), ACL_SELECT);
+ if (aclresult != ACLCHECK_OK)
+ aclcheck_error(aclresult,
+ get_relkind_objtype(rel->rd_rel->relkind),
+ RelationGetRelationName(rel));
}
/*
diff --git a/doc/src/sgml/pgamcheck.sgml b/doc/src/sgml/pgamcheck.sgml
index 3e059e7753..fc36447dda 100644
--- a/doc/src/sgml/pgamcheck.sgml
+++ b/doc/src/sgml/pgamcheck.sgml
@@ -19,7 +19,7 @@
connecting as a user with sufficient privileges to check tables and indexes.
Currently, this requires execute privileges on <xref linkend="amcheck"/>'s
<function>bt_index_parent_check</function> and <function>verify_heapam</function>
- functions.
+ functions, and on having privileges to access the relations being checked.
</para>
<synopsis>
--
2.21.1 (Apple Git-122.3)