保障MySQL安全的14个最佳方法(2)


7、移除匿名账户和废弃的账户

有些MySQL数据库的匿名用户的口令为空。因而,任何人都可以连接到这些数据库。可以用下面的命令进行检查:

MySQL> select * from MySQL.user where user="";

在安全的系统中,不会返回什么信息。另一种方法是:

MySQL> SHOW GRANTS FOR ''@'localhost';

MySQL> SHOW GRANTS FOR ''@'myhost';

如果grants存在,那么任何人都可以访问数据库,至少可以使用默认的数据库“test”。其检查方法如下:

shell> MySQL -u blablabla

如果要移除账户,则执行命令:

MySQL> DROP USER "";

从MySQL的5.0版开始支持DROP USER命令。如果你使用的老版本的MySQL,你可以像下面这样移除账户:

MySQL> use MySQL;

MySQL> DELETE FROM user WHERE user="";

MySQL> flush privileges;

8、降低系统特权

常见的数据库安全建议都有“降低给各方的特权”这一说法。对于MySQL也是如此。一般情况下,开发人员会使用最大的许可,不像安全管理一样考虑许可原则,而这样做会将数据库暴露在巨大的风险中。

为保护数据库,务必保证真正存储MySQL数据库的文件目录是由”MySQL” 用户和” MySQL”组所拥有的。

shell>ls -l /var/lib/MySQL

此外,还要确保仅有用户”MySQL”和root用户可以访问/var/lib/MySQL目录。

MySQL的二进制文件存在于/usr/bin/目录中,它应当由root用户或特定的”MySQL”用户所拥有。对这些文件,其它用户不应当拥有“写”的访问权:

shell>ls -l /usr/bin/my*

9、降低用户的数据库特权

有些应用程序是通过一个特定数据库表的用户名和口令连接到MySQL的,安全人员不应当给予这个用户完全的访问权。

如果攻击者获得了这个拥有完全访问权的用户,他也就拥有了所有的数据库。查看一个用户许可的方法是在MySQL控制台中使用命令SHOW GRANT

>SHOW GRANTS FOR 'user'@'localhost';

为定义用户的访问权,使用GRANT命令。在下面的例子中,user1仅能从dianshang数据库的billing表中选择:

> GRANT SELECT ON billing.dianshang TO 'user1'@'localhost';

> FLUSH PRIVILEGES;

如此一来,user1用户就无法改变数据库中这个表和其它表的任何数据。

另一方面,如果你要从一个用户移除访问权,就应使用一个与GRANT命令类似的REVOKE命令:

> REVOKE SELECT ON billing.ecommerce FROM 'user1'@'localhost';

> FLUSH PRIVILEGES;

10、移除和禁用。MySQL_history文件

在用户访问MySQL控制台时,所有的命令历史都被记录在~/.MySQL_history中。如果攻击者访问这个文件,他就可以知道数据库的结构。

$ cat ~/.MySQL_history

为了移除和禁用这个文件,应将日志发送到/dev/null。

$export MySQL_HISTFILE=/dev/null

上述命令使所有的日志文件都定向到/dev/null,你应当从home文件夹移除。MySQL_history:$ rm ~/.MySQL_history,并创建一个到/dev/null的符号链接。

11、安全补丁

务必保持数据库为最新版本。因为攻击者可以利用上一个版本的已知漏洞来访问企业的数据库。

12、启用日志

如果你的数据库服务器并不执行任何查询,建议你启用跟踪记录,你可以通过在/etc/my.cnf文件的[MySQL]部分添加:log =/var/log/mylogfile。

对于生产环境中任务繁重的MySQL数据库,因为这会引起服务器的高昂成本。

此外,还要保证只有root和MySQL可以访问这些日志文件。

错误日志

务必确保只有root和MySQL可以访问hostname.err日志文件。该文件存放在MySQL数据历史中。该文件包含着非常敏感的信息,如口令、地址、表名、存储过程名、代码等,它可被用于信息收集,并且在某些情况下,还可以向攻击者提供利用数据库漏洞的信息。攻击者还可以知道安装数据库的机器或内部的数据。

MySQL日志

确保只有root和MySQL可以访问logfileXY日志文件,此文件存放在MySQL的历史目录中。

13、改变root目录

Unix操作系统中的chroot可以改变当前正在运行的进程及其子进程的root目录。重新获得另一个目录root权限的程序无法访问或命名此目录之外的文件,此目录被称为“chroot监狱”。

通过利用chroot环境,你可以限制MySQL进程及其子进程的写操作,增加服务器的安全性。

你要保证chroot环境的一个专用目录,如/chroot/MySQL。此外,为了方便利用数据库的管理工具,你可以在MySQL配置文件的[client]部分改变下面的参数:

[client]

socket = /chroot/MySQL/tmp/MySQL.sock

14、禁用LOCAL INFILE命令

LOAD DATA LOCAL INFILE可以从文件系统中读取文件,并显示在屏幕中或保存在数据库中。如果攻击者能够从应用程序找到SQL注入漏洞,这个命令就相当危险了。下面的命令可以从MySQL控制台进行操作:

> SELECT LOAD_FILE("/etc/passwd");

该命令列示了所有的用户。解决此问题的最佳方法是在MySQL配置中禁用它,在CentOS中找到/etc/my.cnf或在Ubuntu中找到/etc/MySQL/my.cnf,在[MySQLd]部分增加下面一行:set-variable=local-infile=0。搞定。

当然,唇亡齿寒,保护服务器的安全对于保障MySQL数据库的安全也是至关重要的。服务器的安全对于数据库来说可谓生死攸关。

(责任编辑:)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

如何运维网站能让其稳定高效之稳定篇

如何运维网站能让其稳定高效之稳定篇

作为一名运维工程师,工作中最大的希望就是自己运维的网站能够稳定高效运行,但理想很...[详细]

黑客、Geek等高手们都是这样上网的

黑客、Geek等高手们都是这样上网的

电脑高手们都会尽可能地寻找各种快捷高效的操作方式,譬如很多快速启动类的工具(如Exe...[详细]

如何选择最佳的数据中心闪存?

如何选择最佳的数据中心闪存?

全闪存数据中心是个未来概念,同样还有不少方法实现数据中心内服务器或基于阵列的闪存...[详细]

手机解锁:图案、数字谁更强?

手机解锁:图案、数字谁更强?

手机九宫格解锁到底安全不?九宫格能画出多少图案啊?我自己设置的九宫格总是被同学分...[详细]

黑客声称一款流行的加密App竟然只用了异或

黑客声称一款流行的加密App竟然只用了异或加密!

一名黑客生成加密程序的作者竟然没有实现其核心的功能:加密! 这位ID为NinjaDoge24(...[详细]

返回首页 返回顶部