我需要限制pgsql中的用户执行copy语句。我可以禁止执行任何CRUD操作。
答案 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;