block_copy_command
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
block_copy_command | 0.1.5 | SEC | BSD 3-Clause | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7405 | block_copy_command | 否 | 是 | 是 | 是 | 否 | 否 | - |
Requires shared_preload_libraries = block_copy_command.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.5 | 1817161514 | block_copy_command | - |
| RPM | PIGSTY | 0.1.5 | 1817161514 | block_copy_command_$v | - |
| DEB | PIGSTY | 0.1.5 | 1817161514 | postgresql-$v-block-copy-command | - |
构建
您可以使用 pig build 命令构建 block_copy_command 扩展的 RPM / DEB 包:
pig build pkg block_copy_command # 构建 RPM / DEB 包
安装
您可以直接安装 block_copy_command 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install block_copy_command; # 当前活跃 PG 版本安装
pig ext install -y block_copy_command -v 18 # PG 18
pig ext install -y block_copy_command -v 17 # PG 17
pig ext install -y block_copy_command -v 16 # PG 16
pig ext install -y block_copy_command -v 15 # PG 15
pig ext install -y block_copy_command -v 14 # PG 14
dnf install -y block_copy_command_18 # PG 18
dnf install -y block_copy_command_17 # PG 17
dnf install -y block_copy_command_16 # PG 16
dnf install -y block_copy_command_15 # PG 15
dnf install -y block_copy_command_14 # PG 14
apt install -y postgresql-18-block-copy-command # PG 18
apt install -y postgresql-17-block-copy-command # PG 17
apt install -y postgresql-16-block-copy-command # PG 16
apt install -y postgresql-15-block-copy-command # PG 15
apt install -y postgresql-14-block-copy-command # PG 14
预加载配置:
shared_preload_libraries = 'block_copy_command';
创建扩展:
CREATE EXTENSION block_copy_command;
用法
block_copy_command 通过安装 ProcessUtility hook,在整个集群范围内拦截 COPY 命令。它通过 shared_preload_libraries 加载,而 CREATE EXTENSION 只是在每个数据库中登记扩展元数据。
这个扩展适用于希望默认禁止非超级用户执行 COPY TO 和 COPY FROM,同时仍可通过 GUC 和审计表进行更细粒度控制的部署场景。
安装与启用
shared_preload_libraries = 'block_copy_command'
CREATE EXTENSION block_copy_command;
README 指出,一旦库被加载,这个 hook 就会对整个集群生效。
拦截规则
默认情况下,非超级用户无法执行 COPY。
COPY my_table TO STDOUT;
COPY my_table FROM STDIN;
COPY (SELECT * FROM my_table) TO '/tmp/out.csv';
超级用户默认可以绕过拦截,除非它们被列入 block_copy_command.blocked_roles,或者启用了 block_copy_command.block_program。COPY ... PROGRAM 默认对所有用户都被阻止。
配置项
block_copy_command.enabled控制是否拦截非超级用户。block_copy_command.block_to控制是否阻止COPY TO。block_copy_command.block_from控制是否阻止COPY FROM。block_copy_command.block_program阻止所有用户执行COPY TO/FROM PROGRAM。block_copy_command.hint会为被阻止的命令附加自定义HINT:。block_copy_command.blocked_roles会永久阻止指定角色,包括超级用户。block_copy_command.audit_log_enabled控制是否将拦截到的COPY事件写入block_copy_command.audit_log。
审计日志
扩展会把被拦截的 COPY 活动记录到 block_copy_command.audit_log,并将被阻止事件以 LOG 级别写入 PostgreSQL 服务器日志。
README 中常见的监控查询包括查看最近事件、筛选被阻止事件,以及按用户分组统计。
范围
上游 README 已经覆盖了需求、启用方式、拦截行为、主要 GUC、审计表和测试覆盖,因此这个 stub 不需要额外的项目主页或文档站内容。