是否可以使用 PL/pgSQL 读取、写入、删除操作系统文件?
我可以运行操作系统命令吗?
我看过一些例子,你可以复制像CSV这样的文件,但你能读/写/删除操作系统文件吗?你能执行操作系统命令吗?
不,这是不可能的。
PL/pgSQL是一种受信任的语言,因此不允许访问服务器资源,更不用说运行操作系统命令了。
"可信语言"的解释
可选关键字 TRUSTED 指定该语言不授予对用户原本不会拥有的数据的访问权限。可信语言是为普通数据库用户(没有超级用户权限的用户)设计的,允许他们安全地创建函数和过程。由于 PL 函数在数据库服务器内部执行,因此应仅针对不允许访问数据库服务器内部或文件系统的语言提供 TRUSTED 标志
有一些SQL函数可用,使具有超级用户权限的角色能够读取服务器上的文件 - 但这独立于PL/pgSQL。
如果您确实想为所有类型的攻击打开数据库服务器,请使用不受信任的语言,例如PL/Python,或者如果您真的很喜欢冒险PL/SH
PostgreSQL有一些函数来读取数据目录中的文件:pg_read_file
和pg_read_binary_file
"adminpack"扩展具有写入文件的功能:pg_file_write
也许你可以滥用COPY ... TO PROGRAM
在服务器上运行代码。
但聪明的做法是用PL/PerlU或PL/Python编写一个函数。