可以使用 plpgsql 读取/写入/删除操作系统文件吗?



是否可以使用 PL/pgSQL 读取、写入、删除操作系统文件?

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

我看过一些例子,你可以复制像CSV这样的文件,但你能读/写/删除操作系统文件吗?你能执行操作系统命令吗?

不,这是不可能的。

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

"可信语言"的解释

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


有一些SQL函数可用,使具有超级用户权限的角色能够读取服务器上的文件 - 但这独立于PL/pgSQL。

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

PostgreSQL有一些函数来读取数据目录中的文件:pg_read_filepg_read_binary_file

"adminpack"扩展具有写入文件的功能:pg_file_write

也许你可以滥用COPY ... TO PROGRAM在服务器上运行代码。

但聪明的做法是用PL/PerlU或PL/Python编写一个函数。

最新更新