Teach RemoveRoleFromObjectPolicy() about partitioned tables.
Table partitioning, introduced in commit f0e44751d7
, added a new
relkind - RELKIND_PARTITIONED_TABLE. Update
RemoveRoleFromObjectPolicy() to handle it, otherwise DROP OWNED BY
will fail if the role has any RLS policies referring to partitioned
tables.
Dean Rasheed, reviewed by Amit Langote.
Discussion: https://postgr.es/m/CAEZATCUnNOKN8sLML9jUzxecALWpEXK3a3W7y0PgFR4%2Buhgc%3Dg%40mail.gmail.com
This commit is contained in:
parent
0436f6bde8
commit
f356ec5744
|
@ -474,7 +474,8 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id)
|
|||
|
||||
rel = relation_open(relid, AccessExclusiveLock);
|
||||
|
||||
if (rel->rd_rel->relkind != RELKIND_RELATION)
|
||||
if (rel->rd_rel->relkind != RELKIND_RELATION &&
|
||||
rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is not a table",
|
||||
|
|
|
@ -3885,6 +3885,7 @@ RESET SESSION AUTHORIZATION;
|
|||
CREATE ROLE regress_rls_dob_role1;
|
||||
CREATE ROLE regress_rls_dob_role2;
|
||||
CREATE TABLE dob_t1 (c1 int);
|
||||
CREATE TABLE dob_t2 (c1 int) PARTITION BY RANGE (c1);
|
||||
CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1 USING (true);
|
||||
DROP OWNED BY regress_rls_dob_role1;
|
||||
DROP POLICY p1 ON dob_t1; -- should fail, already gone
|
||||
|
@ -3892,6 +3893,9 @@ ERROR: policy "p1" for table "dob_t1" does not exist
|
|||
CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true);
|
||||
DROP OWNED BY regress_rls_dob_role1;
|
||||
DROP POLICY p1 ON dob_t1; -- should succeed
|
||||
CREATE POLICY p1 ON dob_t2 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true);
|
||||
DROP OWNED BY regress_rls_dob_role1;
|
||||
DROP POLICY p1 ON dob_t2; -- should succeed
|
||||
DROP USER regress_rls_dob_role1;
|
||||
DROP USER regress_rls_dob_role2;
|
||||
--
|
||||
|
|
|
@ -1740,6 +1740,7 @@ CREATE ROLE regress_rls_dob_role1;
|
|||
CREATE ROLE regress_rls_dob_role2;
|
||||
|
||||
CREATE TABLE dob_t1 (c1 int);
|
||||
CREATE TABLE dob_t2 (c1 int) PARTITION BY RANGE (c1);
|
||||
|
||||
CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1 USING (true);
|
||||
DROP OWNED BY regress_rls_dob_role1;
|
||||
|
@ -1749,6 +1750,10 @@ CREATE POLICY p1 ON dob_t1 TO regress_rls_dob_role1,regress_rls_dob_role2 USING
|
|||
DROP OWNED BY regress_rls_dob_role1;
|
||||
DROP POLICY p1 ON dob_t1; -- should succeed
|
||||
|
||||
CREATE POLICY p1 ON dob_t2 TO regress_rls_dob_role1,regress_rls_dob_role2 USING (true);
|
||||
DROP OWNED BY regress_rls_dob_role1;
|
||||
DROP POLICY p1 ON dob_t2; -- should succeed
|
||||
|
||||
DROP USER regress_rls_dob_role1;
|
||||
DROP USER regress_rls_dob_role2;
|
||||
|
||||
|
|
Loading…
Reference in New Issue