首页 > 解决方案 > 可以用 plpgsql 读/写/删除操作系统文件吗?

问题描述

是否可以使用 PL/pgSQL 读取、写入、删除 OS 文件?

我可以运行操作系统命令吗?

我看过一些示例,您可以复制 CSV 等文件,但您可以读取/写入/删除操作系统文件吗?你能执行操作系统命令吗?

标签: postgresqlplpgsql

解决方案


不,那是不可能的。

PL/pgSQL 是一种受信任的语言,因此不允许访问服务器资源,更不用说运行操作系统命令了。

“可信语言”的解释

可选的关键字 TRUSTED 指定该语言不授予对用户本来没有的数据的访问权限。可信语言是为普通数据库用户(没有超级用户权限的用户)设计的,允许他们安全地创建函数和过程。由于 PL 函数是在数据库服务器内部执行的,因此 TRUSTED 标志应该只用于不允许访问数据库服务器内部或文件系统的语言


有一些可用的SQL 函数使具有超级用户权限的角色能够读取服务器上的文件——但这与 PL/pgSQL 无关。

如果您确实想为所有类型的攻击打开数据库服务器,请使用不受信任的语言,例如PL/Python,或者如果您真的喜欢PL/sh


推荐阅读