提高postgresql安全性(二、超级用户的隐患)

(以下讨论以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:
     虽然以上文件存取函数只限于pgdata集群目录,但pg_ls_dir函数可列出目录的内容,pg_read(_binary)_file函数可读取文件内容,很容易将数据库的整个集群从服务器上download下来,如果有SSL私钥key也放在这pgdata目录(默认)下,也会被一览无余。

三、状态采集函数 pg_stat_activity:
   pg_stat_activity 可列出当前正在连接的进程状态,其中列query可显示上次执行语句,若有机密数据,也将被一览无余(非超级权限用户也可执行此函数,但此列是空的)

综上所述,请不要将超级权限用户分发到应用上,同时严格保密密码,也不要将postgresql装在非服务器版本的电脑上

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trainee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值