Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209904
  • 博文数量: 21
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-10 14:54
文章分类

全部博文(21)

文章存档

2020年(1)

2019年(3)

2015年(2)

2014年(1)

2011年(1)

2009年(7)

2008年(4)

2007年(2)

我的朋友

分类: Mysql/postgreSQL

2019-10-21 14:04:53

(以下讨论以postgresql10版本为准)

有些人在设计
应用的时候,为了图方便,将超级用户postgres或有超级权限的用户当做应用程序的连接用户,此举危害极大。因为Postgresql有几个只有超级用户才能执行的函数,不但可以摧毁数据库,甚至可以摧毁服务器的操作系统。

一、大对象操作函数 lo_import、lo_export:
     lo_import函数可读取操作系统的文件为一大对象,lo_export函数可将大对象写到操作系统的文件,假设你的服务器C盘有个文件odbc.ini。
点击(此处)折叠或打开
  1. select lo_import('c:\odbc.ini') -- 返回OID,比如是123
  2. select lo_put(123,0,'\x414243') -- 将大对象前3个字符改为ABC
  3. select lo_export(123,'c:\odbc.ini') -- 你会发现odbc.ini前3个字母也被改为ABC    
  4. 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装在非服务器版本的电脑上
阅读(2991) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~