Re: [HACKERS] Partitioned tables vs GRANT
От | Keith Fiske |
---|---|
Тема | Re: [HACKERS] Partitioned tables vs GRANT |
Дата | |
Msg-id | CAG1_KcBottdL9KsKsjcYmUiHViGW-h+SxJVRy40GY8ustNXxnQ@mail.gmail.com обсуждение исходный текст |
Ответ на | [HACKERS] Partitioned tables vs GRANT (Joe Conway <mail@joeconway.com>) |
Список | pgsql-hackers |
On Fri, Apr 7, 2017 at 2:05 PM, Joe Conway <mail@joeconway.com> wrote:
Apparently INSERT and SELECT on the parent partitioned table skip normal
acl checks on the partitions. Is that intended behavior?
8<---------------------------
test=# create user part_test;
CREATE ROLE
test=#
test=# create table t1 (id int) partition by range ((id % 4));
CREATE TABLE
test=# create table t1_0 partition of t1 for values from (0) to (1);
CREATE TABLE
test=# create table t1_1 partition of t1 for values from (1) to (2);
CREATE TABLE
test=# create table t1_2 partition of t1 for values from (2) to (3);
CREATE TABLE
test=# create table t1_3 partition of t1 for values from (3) to (4);
CREATE TABLE
test=# grant all on TABLE t1 to part_test;
GRANT
test=# set session authorization part_test ;
SET
test=> select current_user;
current_user
--------------
part_test
(1 row)
test=> insert into t1 values(0),(1),(2),(3);
INSERT 0 4
test=> insert into t1_0 values(0);
ERROR: permission denied for relation t1_0
test=> insert into t1_1 values(1);
ERROR: permission denied for relation t1_1
test=> insert into t1_2 values(2);
ERROR: permission denied for relation t1_2
test=> insert into t1_3 values(3);
ERROR: permission denied for relation t1_3
test=> select * from t1;
id
----
0
1
2
3
(4 rows)
test=> select * from t1_0;
ERROR: permission denied for relation t1_0
test=> select * from t1_1;
ERROR: permission denied for relation t1_1
test=> select * from t1_2;
ERROR: permission denied for relation t1_2
test=> select * from t1_3;
ERROR: permission denied for relation t1_3
test=> reset session authorization;
RESET
test=# drop table if exists t1;
DROP TABLE
8<---------------------------
Joe
--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development
I encountered that as well testing for native in pg_partman. I had to include the code for non-native that propagates ownership/privileges from the parent to the child.
Another question to ask is that if you change privileges on the parent, does that automatically change them for all children as well? I encountered this being a rather expensive operation using plpgsql methods to fix it when the child count grows high. That's why I have resetting all child table privileges as a separate, manual function and changes only apply to new partitions automatically. Hopefully internally there's a more efficient way.Keith
В списке pgsql-hackers по дате отправления: