如何撤销对用户postgres的复制访问?

时间:2012-08-01 07:04:18

标签: postgresql postgis postgresql-9.1

我希望为我的数据库提供基于角色的访问权限。我创建了一个新用户,并希望此用户仅在Table上选择访问权限,但默认情况下也会复制。我想撤消对此用户的此副本访问权限。在这种情况下的任何帮助都会非常明显。

非常感谢!!!

1 个答案:

答案 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

(主要)阻止用户执行COPYSELECT INTO的唯一方法是强制通过SECURITY DEFINER存储过程进行所有访问,这些存储过程定义了非常有限的访问权限。< / p>

聪明的用户仍然可以使用查询编写COPY (SELECT ...) TO stdout,该查询使用存储过程API来循环键并请求每个键。它会变慢,但只要你提供任何方法列出表格中的所有键,它就会起作用。

最后,如果你给他们SELECT,你就可以让他们以这种方式复制。