【发布时间】:2018-06-22 15:56:21
【问题描述】:
在数据库中有 3 个表 - 部门、员工、帐户。一个部门有很多员工。 Employee 包含列 department_id bigint Account 表包含列 login varchar、employee_id bigint 并用于将 Postgres 用户(角色)绑定到 Employee 中的行。
我的目标是让用户只看到和使用那些 department_id 的值与用户相同的 Employee 行。
一定是这样的:
CREATE POLICY locale_policy ON employee
TO justuser, operator
USING (department_id =
(SELECT department_id FROM employee WHERE id =
(SELECT employee_id FROM account WHERE login = CURRENT_USER)
)
)
但由于来自 Employee 的子查询,它正在提高 infinite recursion detected in policy for relation employee。
编辑:关系定义为:
create table department(
id serial primary key);
create table employee(
id serial primary key,
department_id int8 not null references department(id));
create table account(
id serial primary key,
login varchar(100) not null unique,
employee_id int8 not null unique references employee(id));
【问题讨论】:
-
请提供关系 ddl o 转载。此外,如果您为员工创建政策,
SELECT department_id FROM employee看起来很过分 - 为什么不USING (id = (SELECT employee_id FROM account WHERE login = CURRENT_USER)?...department_id与 id 有一对多关系吗?... -
@VaoTsun,我编辑了帖子,你是这个意思吗?许多员工可以拥有相同的
department_id,这就是政策的重点 - 挑选具有重合部门的员工 -
无法复制 - 抱歉 - 也许是在 rexter 上构建的?..
标签: sql postgresql policy rls