postgresql - 如何撤销对用户 postgres 的复制访问权限?

标签 postgresql postgis postgresql-9.1

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

非常感谢!!!

最佳答案

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 进行所有访问。定义非常有限的表访问权限的存储过程。

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

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

关于postgresql - 如何撤销对用户 postgres 的复制访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754149/

相关文章:

postgresql - PostgisPG10Dialect 现在被 PostgreSQLDialect 取代了吗?

sql - 如何列出与特定表相关的所有表名

postgresql - 在 PostgreSQL 中重命名枚举项

regex - Postgresql regexp_matches 语法未按预期工作

postgresql - 在不离开命令行的情况下结束 Postgres 查询 - 自动返回命令行

linux - postgresql-9.4-postgis-2.1 的包依赖问题

postgresql - 如何确定 Postgres 表的 OID?

sql - Postgres : define a default value for CAST failures?

postgresql - postgres - 将输出保存到服务器硬盘

postgresql - PostGIS -Ubuntu 安装错误询问依赖关系