(以下讨论以postgresql10版本为准)
有些人在设计应用的时候,为了图方便,将超级用户postgres或有超级权限的用户当做应用程序的连接用户,此举危害极大。因为Postgresql有几个只有超级用户才能执行的函数,不但可以摧毁数据库,甚至可以摧毁服务器的操作系统。
一、大对象操作函数 lo_import、lo_export:
lo_import函数可读取操作系统的文件为一大对象,lo_export函数可将大对象写到操作系统的文件,假设你的服务器C盘有个文件odbc.ini。
select lo_import('c:\odbc.ini') -- 返回OID,比如是123
select lo_put(123,0,'\x414243') -- 将大对象前3个字符改为ABC
select lo_export(123,'c:\odbc.ini') -- 你会发现odbc.ini前3个字母也被改为ABC
select lo_unlink(123) -- 删除大对象123
所幸的是lo_import、lo_export存取操作系统文件的权限依赖于服务器运行postgresq操作系统用户的权限,如果是系统管理员administator身份运行postgresql,那就可以修改服务器上的任何文件。所以postgresql在设计时是不允许系统管理员初始化和运行数据库的,然而在文件系统没有权限设置功能的操作系统如WIN7、XP等非服务器版的电脑上,postgresql是可以以系统管理员身份运行的,所以在这些系统上运行postgresql是十分危险的事。
二、文件存取函数 pg_ls_dir、pg_read_file、pg_read_binary_file:
虽然以上文件存取函数只限

最低0.47元/天 解锁文章
1793

被折叠的 条评论
为什么被折叠?



