我希望为我的数据库提供基于角色的访问权限。我创建了一个新用户,并希望此用户仅在Table上选择访问权限,但默认情况下也会复制。我想撤消对此用户的此副本访问权限。在这种情况下的任何帮助都会非常明显。
非常感谢!!!
答案 0 :(得分:3)
PostgreSQL并不直接支持你想要的东西 - 理论上它也是非常可疑的。
即使您修改PostgreSQL以添加COPY
权限,用户也只需使用XML table functions,新JSON support或普通旧SELECT ... FROM tablename;
来提取数据
如果某人对某个表拥有SELECT
权限,他们可以COPY ... TO stdout
该表,如果他们在任何地方拥有SELECT ... INTO
权限,他们可以CREATE
另一个表。这是有道理的;毕竟,他们总是可以SELECT * FROM tablename;
并在客户端处理它。
您可以选择GRANT
个别列的权限,但他们仍然可以SELECT allowedcol1, allowedcol2, ... FROM tablename
,因此COPY (SELECT allowedcol1, allowedcol2, ... FROM tablename) TO stdout
。
(主要)阻止用户执行COPY
或SELECT INTO
的唯一方法是强制通过SECURITY DEFINER
存储过程进行所有访问,这些存储过程定义了非常有限的访问权限。< / p>
聪明的用户仍然可以使用查询编写COPY (SELECT ...) TO stdout
,该查询使用存储过程API来循环键并请求每个键。它会变慢,但只要你提供任何方法列出表格中的所有键,它就会起作用。
最后,如果你给他们SELECT
,你就可以让他们以这种方式复制。