Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对postgresql表中的某些指定行授予更新或选择权限?_Postgresql_Grant - Fatal编程技术网

如何对postgresql表中的某些指定行授予更新或选择权限?

如何对postgresql表中的某些指定行授予更新或选择权限?,postgresql,grant,Postgresql,Grant,我想在我的Postgresql数据库中创建一些角色,并授予一些访问权限 我有学生角色,我想授予此用户类型:只能编辑学生表中关于他/她的记录,不能编辑其他行 我怎么做 谢谢使用适当的where子句在表上创建一个视图,然后授予对该视图的访问权: create view students_view as select col1, col2, col3 -- limit column access here from mytable where <whatever>; -- limit ro

我想在我的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安全编码准则-设置函数的搜索路径,避免使用字符串替换动态SQL执行,等等


如果是按当前用户过滤的视图,上面给出的视图方法可以非常好地工作。您可能还想查看新的安全屏障视图;有关它们的有用讨论,请参阅。

直到最近的Pg版本,才需要显式触发器或规则来使视图可更新,所以这是一种真实的情况。插入如何?假设您的筛选条件为foo=bar。如果用户在students_viewfoo values bar中插入一个值,会发生什么;甚至,更新学生的视图集foo=bar;他们能做到吗?无论如何要限制这种行为吗?@chris在我看来,带有foo=bar的新/更新行应该是可见的。如果这不好,要么缩小过滤器,要么使用id在id的特定白名单上进行过滤…其中id在1、3、5、8中,等等