我想对我的数据库进行基于角色的访问。我创建了一个新用户,并希望该用户仅选择对表的访问权限,但这也是默认情况下的副本。我想撤销对该用户的复制访问权限。在这种情况下的任何帮助都是非常可观的。
多谢!!!
我想对我的数据库进行基于角色的访问。我创建了一个新用户,并希望该用户仅选择对表的访问权限,但这也是默认情况下的副本。我想撤销对该用户的复制访问权限。在这种情况下的任何帮助都是非常可观的。
多谢!!!
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
。
(主要)阻止用户执行COPY
or的唯一方法SELECT INTO
是强制通过SECURITY DEFINER
存储过程进行所有访问,这些存储过程定义了对表的非常有限的访问。
聪明的用户仍然可以编写一个COPY (SELECT ...) TO stdout
查询,使用您的存储过程 API 来循环键并请求每个键。它会更慢,但只要您提供任何方法来列出表中的所有键,它就可以工作。
最后,如果你给了他们,SELECT
你就给了他们以一种或另一种方式复制的能力。