diff options
| author | Peter Eisentraut | 2019-12-20 07:25:43 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2019-12-20 07:27:37 +0000 |
| commit | df7fe9e2d707da69a4437fb6f9e695c070882160 (patch) | |
| tree | 75db38ed1676d8c4323a9f11bc6ef977d212c328 /src/backend/rewrite | |
| parent | 8c6d30f211390df911072d33f0114a31f066a4cd (diff) | |
Disallow dropping rules on system tables by default
This was previously not covered by allow_system_table_mods, but now it
is. The impact in practice is probably low, but this makes it
consistent with most other DDL commands.
Reviewed-by: Robert Haas <robertmhaas@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/ee9df1af-c0d8-7c82-5be7-39ce4e3b0a9d%402ndquadrant.com
Diffstat (limited to 'src/backend/rewrite')
| -rw-r--r-- | src/backend/rewrite/rewriteRemove.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c index c5e2aed58df..bb98b6936a0 100644 --- a/src/backend/rewrite/rewriteRemove.c +++ b/src/backend/rewrite/rewriteRemove.c @@ -18,6 +18,7 @@ #include "access/htup_details.h" #include "access/sysattr.h" #include "access/table.h" +#include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -28,6 +29,7 @@ #include "utils/fmgroids.h" #include "utils/inval.h" #include "utils/lsyscache.h" +#include "utils/rel.h" #include "utils/syscache.h" /* @@ -72,6 +74,12 @@ RemoveRewriteRuleById(Oid ruleOid) eventRelationOid = ((Form_pg_rewrite) GETSTRUCT(tuple))->ev_class; event_relation = table_open(eventRelationOid, AccessExclusiveLock); + if (!allowSystemTableMods && IsSystemRelation(event_relation)) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("permission denied: \"%s\" is a system catalog", + RelationGetRelationName(event_relation)))); + /* * Now delete the pg_rewrite tuple for the rule */ |
