我想在我的 Postgresql 数据库中创建一些角色并授予一些访问权限。
我有学生角色,我想授予此用户类型:只能编辑在学生表中记录他/她,不能编辑其他行
我该怎么做?
谢谢
我想在我的 Postgresql 数据库中创建一些角色并授予一些访问权限。
我有学生角色,我想授予此用户类型:只能编辑在学生表中记录他/她,不能编辑其他行
我该怎么做?
谢谢
使用适当的 where 子句在表上创建一个视图,然后授予对它的访问权限:
create view students_view as
select col1, col2, col3 -- limit column access here
from mytable
where <whatever>; -- limit row access here
-- limit what he can do here
grant update, select to student_role;
顺便说一句,您不能更新视图是一个普遍存在的误解,但只有当视图是连接或类似复杂的查询时才会这样。
PostgreSQL 没有行级声明性安全性(但是,正在进行的工作),所以如果你不能只创建一个视图 - 比如说,如果你有很多不同的人需要这种访问 - 你可能需要一个SECURITY DEFINER
辅助函数或触发。
你有几个选择:
SECURITY DEFINER
函数,让他们只进行允许的更改,并将他们对表的访问权限限制为、SELECT
撤销UPDATE
、和权限;或者DELETE
TRUNCATE
INSERT
GRANT
他们对表进行写访问。在这两种方法中,函数和受限权限方法是迄今为止最安全的选择,只要您遵循SECURITY DEFINER
上面设置的安全编码准则 - 设置search_path
函数、避免使用字符串替换的动态 SQL ( EXECUTE
) 等。
上面给出的视图方法可以很好地工作,如果它是一个过滤的视图current_user
。您可能还想查看新SECURITY BARRIER
视图;有关它们的有用讨论,请参见这篇文章。