可以使用plpgsql读取/写入/删除OS文件吗?

时间:2019-04-02 13:21:15

标签: postgresql plpgsql

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

我可以运行OS命令吗?

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

2 个答案:

答案 0 :(得分:3)

不,那不可能。

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

Explanation of "trusted language"

  

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


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

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

答案 1 :(得分:1)

PostgreSQL在数据目录中有一些functions to read filespg_read_filepg_read_binary_file

“adminpack” extension具有写入文件的功能:pg_file_write

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

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