是否可以使用PL / pgSQL读取,写入,删除OS文件?
我可以运行OS命令吗?
我见过一些例子,你可以复制像CSV这样的文件,但是你能读/写/删除OS文件吗?你能执行OS命令吗?
不,那是不可能的。
PL / pgSQL是一种受信任的语言,因此不允许访问服务器资源,更不用说运行OS命令了。
Explanation of "trusted language"
可选的关键字TRUSTED指定该语言不授予用户不具备的数据的访问权限。可信语言是为普通数据库用户(没有超级用户权限的用户)设计的,并允许他们安全地创建函数和过程。由于PL函数在数据库服务器内部执行,因此只应为不允许访问数据库服务器内部或文件系统的语言提供TRUSTED标志。
有一些SQL functions可用,允许具有超级用户权限的角色读取服务器上的文件 - 但这与PL / pgSQL无关。
如果您确实想要打开数据库服务器以进行各种攻击,请使用不受信任的语言,例如PL/Python,或者如果您真的喜欢冒险的PL/sh
PostgreSQL在数据目录中有一些functions to read files:pg_read_file
和pg_read_binary_file
“adminpack” extension具有写入文件的功能:pg_file_write
也许你可以滥用COPY ... TO PROGRAM
在服务器上运行代码。
但聪明的做法是用PL / PerlU或PL / Python编写一个函数。