Postgresql безопасность на уровне строк с переменной сеанса - PullRequest
0 голосов
/ 29 мая 2018

Я изучаю безопасность на уровне строк postgres с помощью переменных сеанса.

create table user_table (
    username text,
    idx integer
);
alter table user_table enable row level security;
create policy user_p on user_table for select
using (idx <= (current_setting('my.idx',true)::int));

insert into user_table values('1',1),('2',2),('3',3);

вывод:

# set my.idx = 2;
SET
# select * from user_table;
 username | idx
----------+-----
 1        |   1
 2        |   2
 3        |   3
(3 rows)

он должен отображать user_table с именами пользователей '1' и '2', но он показывает все.что мне не хватает, чтобы вызвать проблему?

1 Ответ

0 голосов
/ 29 мая 2018

https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html

Если в таблице включена защита строк (с помощью ALTER TABLE ... ENABLE ROW LEVEL SECURITY), все обычные права доступа к таблице для выбора строк или изменения строк должны бытьразрешено политикой безопасности строки. (Однако на владельца таблицы обычно не распространяются политики безопасности строк.)

(выделено мной)

проверка:

db=# grant select on user_table to ro;
GRANT
Time: 24.374 ms
db=# set role ro;
SET
Time: 0.305 ms
db=> select * from user_table;
 username | idx
----------+-----
 1        |   1
 2        |   2
(2 rows)

Time: 10.557 ms
db=> set my.idx = 1;
SET
Time: 8.595 ms
db=> select * from user_table;
 username | idx
----------+-----
 1        |   1
(1 row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...