如何限制用户在POSTGRESQL中执行COPY查询?

时间:2018-03-08 09:58:54

标签: postgresql privileges grant revoke

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

1 个答案:

答案 0 :(得分:0)

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 (select * from table1) to stdout;)限制使用COPY进行阅读,您还需要撤消所有对象的阅读权限(即SELECT权限)。

请注意,有一个COPY的变体可以使用 - 如果它从“无处”读取,即:

copy (select 'blabla') to stdout;

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

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

copy (select) to stdout;