我想对我的数据库进行基于角色的访问。我创建了一个新用户,并希望该用户仅选择对表的访问权限,但默认情况下也会复制。我想撤销此用户的复制访问权限。在这方面的任何帮助都非常感谢。
非常感谢!!!
最佳答案
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
进行所有访问。定义非常有限的表访问权限的存储过程。
聪明的用户仍然可以编写一个 COPY (SELECT ...) TO stdout
并使用您的存储过程 API 循环遍历键并请求每个键的查询。它会更慢,但只要您提供任何方式来列出表中的所有键,它就会起作用。
最后,如果你给他们SELECT
,你就给了他们以一种或另一种方式复制的能力。
关于postgresql - 如何撤销对用户 postgres 的复制访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754149/