如何限制用户在 PostgreSQL 中执行 COPY 查询?
How to restrict a user from executing a COPY query in PostgreSQL?
我需要限制 pgsql 中的用户执行复制语句。我可以禁止执行任何 CRUD 操作。
COPY
命令可以从 table 读取到某个地方,或者它可以从某个地方(从文件、另一个 table 或查询)写入 table .
我假设您想限制写入任何 table。
在这种情况下,只需限制该用户的 UPDATE/INSERT/DELETE 操作:
revoke insert, delete, update on all tables in schema public from xxx;
Double-check 您的用户不是超级用户(在这种情况下,所有权限检查都将被忽略;所以如果是,则只是 alter role xxx nosuperuser;
)。
还值得为所有新 table 定义默认策略,撤销此角色的写入权限:
alter default privileges in schema public
revoke insert,update,delete on tables from xxx;
如果您想限制从任何 table(如 copy (select * from table1) to stdout;
)的 COPY 读取,您还需要撤销所有对象的读取访问权限(即 SELECT 权限)。
请注意,有一个 COPY 的变体仍然可以工作——如果它从 "nowhere" 读取,即:
copy (select 'blabla') to stdout;
或
copy (values('blabla')) to stdout;
或者,更极端的版本,阅读 "nothing":
copy (select) to stdout;
我需要限制 pgsql 中的用户执行复制语句。我可以禁止执行任何 CRUD 操作。
COPY
命令可以从 table 读取到某个地方,或者它可以从某个地方(从文件、另一个 table 或查询)写入 table .
我假设您想限制写入任何 table。
在这种情况下,只需限制该用户的 UPDATE/INSERT/DELETE 操作:
revoke insert, delete, update on all tables in schema public from xxx;
Double-check 您的用户不是超级用户(在这种情况下,所有权限检查都将被忽略;所以如果是,则只是 alter role xxx nosuperuser;
)。
还值得为所有新 table 定义默认策略,撤销此角色的写入权限:
alter default privileges in schema public
revoke insert,update,delete on tables from xxx;
如果您想限制从任何 table(如 copy (select * from table1) to stdout;
)的 COPY 读取,您还需要撤销所有对象的读取访问权限(即 SELECT 权限)。
请注意,有一个 COPY 的变体仍然可以工作——如果它从 "nowhere" 读取,即:
copy (select 'blabla') to stdout;
或
copy (values('blabla')) to stdout;
或者,更极端的版本,阅读 "nothing":
copy (select) to stdout;