postgresql行级安全性与会话变量

时间:2018-05-29 17:29:32

标签: sql postgresql

我正在学习使用会话变量的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 :(得分:3)

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

  

在表上启用行安全性时(使用ALTER TABLE ... ENABLE   ROW LEVEL SECURITY),对表的所有正常访问以选择行   行安全策略必须允许或修改行。的(然而,   表的所​​有者通常不受行安全策略的约束。)

(强调我的)

检查:

<?php

if(isset($_GET['page'])) {
    $url = '?page=' . $_GET['page'];
}else {
    $url = '';
}

?>
<form method="GET" action="<?= $url ?>" >
    Search <input type="text" name="s" />
    <input type="submit" value="Search" />
</form>`