From 6094b830de1e5102def22e8cc8d79bb229608577 Mon Sep 17 00:00:00 2001 From: Hadi Moshayedi Date: Fri, 22 Mar 2019 11:03:44 -0700 Subject: [PATCH] Warn we are not propagating GRANT/REVOKE to workers --- src/backend/distributed/commands/grant.c | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/backend/distributed/commands/grant.c b/src/backend/distributed/commands/grant.c index 4bfef449c..182c7152d 100644 --- a/src/backend/distributed/commands/grant.c +++ b/src/backend/distributed/commands/grant.c @@ -8,12 +8,67 @@ *------------------------------------------------------------------------- */ +#include "postgres.h" + +#include "catalog/namespace.h" #include "distributed/commands.h" +#include "distributed/metadata_cache.h" /* placeholder for PreprocessGrantStmt */ List * PreprocessGrantStmt(Node *node, const char *queryString) { + bool showPropagationWarning = false; + + + if (grantStmt->targtype == ACL_TARGET_ALL_IN_SCHEMA) + { + showPropagationWarning = true; + } + else if (grantStmt->targtype == ACL_TARGET_OBJECT) + { + switch (grantStmt->objtype) + { + case OBJECT_SCHEMA: + case OBJECT_DATABASE: + { + showPropagationWarning = true; + break; + } + + case OBJECT_TABLE: + { + ListCell *rangeVarCell = NULL; + + foreach(rangeVarCell, grantStmt->objects) + { + RangeVar *rangeVar = (RangeVar *) lfirst(rangeVarCell); + + Oid relationId = RangeVarGetRelid(rangeVar, NoLock, false); + if (OidIsValid(relationId) && IsDistributedTable(relationId)) + { + showPropagationWarning = true; + break; + } + } + + break; + } + + /* no need to warn when object is sequence, domain, function, etc. */ + default: + { + break; + } + } + } + + if (showPropagationWarning) + { + const char *type = grantStmt->is_grant ? "GRANT" : "REVOKE"; + ereport(WARNING, (errmsg("not propagating %s command to worker nodes", type))); + } + return NIL; }