0

我想对我的数据库进行基于角色的访问。我创建了一个新用户,并希望该用户仅选择对表的访问权限,但这也是默认情况下的副本。我想撤销对该用户的复制访问权限。在这种情况下的任何帮助都是非常可观的。

多谢!!!

4

1 回答 1

3

PostgreSQL 不直接支持你想要的——理论上它也很可疑。

即使您修改 PostgreSQL 以添加COPY权限,用户也只会使用XML 表函数、新的JSON 支持或普通旧SELECT ... FROM tablename;的来提取数据。

如果有人SELECT对一张桌子拥有权利,他们可以COPY ... TO stdout使用该桌子,SELECT ... INTO如果他们在CREATE任何地方拥有权利,他们也可以使用另一张桌子。这是有道理的;毕竟,他们总是可以SELECT * FROM tablename;在客户端处理它。

可以有选择地GRANT对各个列授予权限,但他们仍然可以执行 a SELECT allowedcol1, allowedcol2, ... FROM tablename,因此 a COPY (SELECT allowedcol1, allowedcol2, ... FROM tablename) TO stdout

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

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

最后,如果你给了他们,SELECT你就给了他们以一种或另一种方式复制的能力。

于 2012-08-01T13:10:39.987 回答