mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Handle append_rel_list in expand_security_qual
During expand_security_quals, we take the security barrier quals on an RTE and create a subquery which evaluates the quals. During this, we have to replace any variables in the outer query which refer to the original RTE with references to the columns from the subquery. We need to also perform that replacement for any Vars in the append_rel_list. Only backpatching to 9.5 as we only go through this process in 9.4 for auto-updatable security barrier views, which UNION ALL queries aren't. Discovered by Haribabu Kommi Patch by Dean Rasheed
This commit is contained in:
@ -640,6 +640,26 @@ EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE;
|
||||
Filter: ((a % 2) = 0)
|
||||
(12 rows)
|
||||
|
||||
-- union all query
|
||||
SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3;
|
||||
a | b | oid
|
||||
---+-----+-----
|
||||
1 | abc | 201
|
||||
3 | cde | 203
|
||||
1 | xxx | 301
|
||||
2 | yyy | 302
|
||||
3 | zzz | 303
|
||||
(5 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3;
|
||||
QUERY PLAN
|
||||
-------------------------------
|
||||
Append
|
||||
-> Seq Scan on t2
|
||||
Filter: ((a % 2) = 1)
|
||||
-> Seq Scan on t3
|
||||
(4 rows)
|
||||
|
||||
-- superuser is allowed to bypass RLS checks
|
||||
RESET SESSION AUTHORIZATION;
|
||||
SET row_security TO OFF;
|
||||
|
@ -255,6 +255,10 @@ EXPLAIN (COSTS OFF) SELECT * FROM t1 FOR SHARE;
|
||||
SELECT * FROM t1 WHERE f_leak(b) FOR SHARE;
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE;
|
||||
|
||||
-- union all query
|
||||
SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3;
|
||||
EXPLAIN (COSTS OFF) SELECT a, b, oid FROM t2 UNION ALL SELECT a, b, oid FROM t3;
|
||||
|
||||
-- superuser is allowed to bypass RLS checks
|
||||
RESET SESSION AUTHORIZATION;
|
||||
SET row_security TO OFF;
|
||||
|
Reference in New Issue
Block a user