【问题标题】:How to restrict a user from executing a COPY query in PostgreSQL?如何限制用户在 PostgreSQL 中执行 COPY 查询?
【发布时间】:2018-03-08 09:58:53
【问题描述】:

我需要限制 pgsql 中的用户执行复制语句。我可以禁止执行任何 CRUD 操作。

【问题讨论】:

  • 限制copy table to撤销选择,限制copy table from撤销插入
  • 我不明白你的第二句话。这和第一句话有什么关系?

标签: postgresql privileges sql-grant sql-revoke


【解决方案1】:

COPY 命令可以从表中读取到某处,也可以从某处(从文件、另一个表或从查询)写入到表。

我假设您想限制对任何表的写入。

在这种情况下,只需限制该用户的 UPDATE/INSERT/DELETE 操作:

revoke insert, delete, update on all tables in schema public from xxx;

仔细检查您的用户是否不是超级用户(在这种情况下,所有权限检查都将被忽略;如果是,则只需 alter role xxx nosuperuser;)。

还值得为所有新表定义默认策略,撤销该角色的写入权限:

alter default privileges in schema public
  revoke insert,update,delete on tables from xxx;

如果您想限制使用 COPY 从任何表中读取(例如 copy (select * from table1) to stdout;),您还需要撤消所有对象的读取权限(即 SELECT 权限)。

请注意,COPY 有一个变体仍然可以工作——如果它从“无处”读取,即:

copy (select 'blabla') to stdout;

或

copy (values('blabla')) to stdout;

或者,更极端的版本,读“无”:

copy (select) to stdout;

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2014-05-24
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多