我正在学习使用会话变量的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',但它显示了所有内容。我错过了什么导致问题?
答案 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>`