You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL自定义视图场景:需规避的高危内置函数问询

PostgreSQL中自定义SELECT视图场景的高风险内置函数

在允许高级用户通过自定义SELECT语句创建视图的场景中,确实存在比"全库数据访问"或"资源过载"风险更高的内置函数,这些函数能直接破坏数据库运行、泄露服务器敏感信息甚至执行系统级操作,具体分类如下:

一、可执行系统配置修改/间接DDL类函数

这类函数能在SELECT语句中触发系统级配置变更或执行高危操作:

  • pg_catalog.pg_reload_conf():强制PostgreSQL重载配置文件(等效于执行SELECT pg_reload_conf();),可修改数据库运行参数(如日志级别、连接限制),直接影响数据库稳定性。
  • pg_catalog.pg_stat_reset():重置数据库统计信息,破坏监控数据连续性,干扰性能分析和故障排查。
  • dblink_exec()(需dblink扩展):通过跨库连接执行任意SQL语句,包括DROP TABLE、ALTER USER等高危DDL/DML操作——只要用户有权限启用dblink,就能在SELECT中调用该函数实现数据篡改或结构破坏。

二、访问服务器文件系统类函数

这类函数能直接读取或操作服务器文件,泄露敏感系统信息:

  • pg_catalog.pg_read_file(filename text):读取服务器上任意文件内容(只要PostgreSQL进程拥有读权限),比如读取pg_hba.conf(数据库访问控制规则)、postgresql.conf(核心配置),甚至系统文件如/etc/passwd。
  • pg_catalog.pg_read_binary_file(filename text):功能类似pg_read_file,支持读取二进制文件,可泄露二进制格式的敏感数据。
  • pg_catalog.pg_ls_dir(dirname text):列出指定目录下的所有文件和子目录,能探测服务器文件系统结构,为进一步攻击提供信息。
  • pg_catalog.pg_logfile_rotate():强制轮转数据库日志文件,可能干扰日志审计,甚至被用来掩盖操作痕迹。

三、破坏数据库可用性类函数

这类函数能直接中断数据库服务或业务流程:

  • pg_catalog.pg_terminate_backend(pid int):终止指定PID的数据库连接,可直接中断正在运行的业务会话,导致数据丢失或服务中断。
  • pg_catalog.pg_cancel_backend(pid int):取消指定PID的查询进程,干扰正常业务操作,比如中断批量数据处理任务。
  • pg_catalog.pg_drop_replication_slot(slot_name text):删除复制槽,破坏主从复制架构,导致数据同步失效,引发灾备故障。

关键防范建议

  1. 权限最小化:仅授予用户必要的SELECT权限,显式撤销上述高风险函数的执行权限(比如REVOKE EXECUTE ON FUNCTION pg_catalog.pg_read_file(text) FROM [user];)。
  2. 语句审计:对用户输入的SELECT语句进行语法分析,过滤掉调用高风险内置函数的内容。
  3. 使用安全视图属性:创建视图时指定SECURITY INVOKER(默认值),确保视图执行时使用用户自身的权限,避免权限提升。
  4. 禁用危险扩展:如果不需要dblink等扩展,直接禁用,从根源切断跨库执行SQL的途径。

内容的提问来源于stack exchange,提问作者Erich Kitzmueller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:19:01