您当前的位置:首页  >> 学无止境 >> 安全相关

mysql数据库安全配置的方法总结

发布时间:2016-02-01 16:37:47来源:wooyun,51CTO作者:佚名

MySQL已经成为当前网络中使用最多的关系型数据库之一,特别是在Web应用上,它占据了中小型应用的绝对优势。因此MySQL数据库安全设置是否得当,对于网络中应用系统的安全是至关重要的。

mysql数据库安全

mysql安全配置注意事项

1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。


2.用set password语句来修改用户的密码,三个步骤,先“MySQL -u root”登陆数据库系统,然后“MySQL> update     MySQL.user set password=password('newpwd')”,最后执行“flush privileges”就可以了。


3.需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作   使用基于ACL即访问控制列表的MySQL数据库安全措施来完成。也有一些对SSL连接的支持。


4.除了root用户外的其他任何用户不允许访问MySQL主数据库中的user表;

  加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;


5.用grant和revoke语句来进行用户访问控制的工作;


6.不使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;


7.不选用字典中的常用的密码来设置mysql数据的密码,防止被暴力破解;


8.采用防火墙来去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在DMZ区域中;


9.从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不能允许从非信任网络中访问数   据库服务器的3306号TCP端口,因此需要在防火墙或路由器上做设定;


10.为了防止被恶意传入非法参数,例如where ID=234,别人却输入where ID=234 OR 1=1导致全部显示,所以在web的    表单中使用''或""来用字符串,在动态URL中加入%22代表双引号、%23代表井号、%27代表单引号;传递未检查过的    值给MySQL数据库是非常危险的;


11.在传递数据给MySQL时检查一下大小;


12.应用程序需要连接到数据库应该使用一般的用户帐号,只开放少数必要的权限给该用户;


13.在各编程接口(C C++ PHP Perl Java JDBC等)中使用特定‘逃脱字符’函数;

   在因特网上使用MySQL数据库时一定少用传输明文的数据,而用SSL和SSH的加密方式数据来传输;


14.学会使用tcpdump和strings工具来查看传输数据的MySQL数据库安全性,例如tcpdump -l -i eth0 -w -src or dst     port 3306 | strings。以普通用户来启动MySQL数据库服务;


15.不使用到表的联结符号,选用的参数 --skip-symbolic-links;


16.确信在MySQL目录中只有启动数据库服务的用户才可以对文件有读和写的权限;


17.不许将process或super权限付给非管理用户,该MySQLadmin processlist可以列举出当前执行的查询文本;super权    限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;


18.file权限不付给管理员以外的用户,防止出现load data '/etc/passwd'到表中再用select 显示出来的问题;


19.如果不相信DNS服务公司的服务,可以在主机名称允许表中只设置IP数字地址;


20.使用max_user_connections变量来使MySQLd服务进程,对一个指定帐户限定连接数;


21.grant语句也支持资源控制选项;


22.启动MySQLd服务进程的MySQL数据库安全选项开关,--local-infile=0或1 

  若是0则客户端程序就无法使用local load data了

  grant insert(user) on MySQL.user to 'user_name'@'host_name';

  若使用--skip-grant-tables系统将对任何用户的访问不做任何访问控制,

  但可以用MySQLadmin flush-privileges或   MySQLadmin reload来开启访问控制;默认情况是show databases语句   对所有用户开放,可以用--skip-show- databases来关闭掉。                                       

23 限制访问mysql端口的ip,只让指定ip的机器访问mysql数据库服务器。

  windows可以通过windows防火墙或者ipsec来限制,linux下可以通过iptables来限制。

24 修改mysql的端pre口,通过修改mysql默认端口,防止恶意嗅探。

  windows下可以修改配置文件my.ini来实现,linux可以修改配置文件my.cnf来实现。

25 对所有用户设置强密码并严格指定对应账号的访问ip

mysql中可在user表中指定用户的访问可访问ip

26 root特权账号的处理

  建议给root账号设置强密码,并指定只容许本地登录。

27 日志的处理

如需要可开启查询日志,查询日志会详细记录登录和查询语句,便于后面分析账户登录运行情况。

28 mysql进程运行账号

在windows下禁止使用local system来运行mysql账户,可以考虑使用network service或者自己新建一个账号,但是必须给与mysql程序所在目录的读取权限和data目录的读取和写入权限; 在linux下,新建一个mysql账号,并在安装的时候就指定mysql以mysql账户来运行,给与程序所在目录的读取权限,data所在目录的读取和写入权限。

29 mysql运行账号的磁盘权限

   1)mysql运行账号需要给予程序所在目录的读取权限,以及data目录的读取和写入权限 

   2)不容许给予其他目录的写入和执行权限,特别是有网站的。 

   3)取消mysql运行账户对于cmd,sh等一些程序的执行权限。

30 网站使用的mysql账户的处理

   新建一个账户,给予账户在所使用数据库的所有权限即可。这样既能保证网站对所对应的数据库的全部操作,也能    保证账户不会因为权限过高而影响安全。给予单个数据库的所有权限的账户不会拥有super, process, file等管    理权限的。当然,如果能很明确是的知道,我的网站需要哪些权限,还是不要多给权限,因为很多时候发布者并不    知道网站需要哪些权限,我才建议上面的配置。而且我指的通用的,具体到只有几台机器,不多的情况下,我个人    建议还是给予只需要的权限,具体可参考上面的表格的建议。

31 删除无用数据库

  test数据库对新建的账户默认有权限,在正式运行环境,无用的数据库可以删除。


mysql入侵提权分析及防止措施

  一般来说,mysql的提权有这么几种方式:

1 udf提权 此方式的关键导入一个dll文件,个人认为只要合理控制了进程账户对目录的写入权限即可防止被导入dll文   件;然后如果万一被攻破,此时只要进程账户的权限够低,也没办执行高危操作,如添加账户等。


2 写入启动文件


  这种方式同上,还是要合理控制进程账户对目录的写入权限。


3 当root账户被泄露


  如果没有合理管理root账户导致root账户被入侵,此时数据库信息肯定是没办法保证了。但是如果对进程账户的权限   控制住,以及其对磁盘的权限控制,服务器还是能够保证不被沦陷的。


4 普通账户泄露(上述所说的,只对某个库有所有权限的账户)

  此处说的普通账户指网站使用的账户,我给的一个比较方便的建议是直接给予特定库的所有权限。账户泄露包括存在   注入及web服务器被入侵后直接拿到数据库账户密码。

 此时,对应的那个数据库数据不保,但是不会威胁到其他数据库。而且这里的普通账户无file权限,所有不能导出文  件到磁盘,当然此时还是会对进程的账户的权限严格控制。

 普通账户给予什么样的权限可以见上表,实在不会就直接给予一个库的所有权限。

本文参考来源:

乌云网:http://drops.wooyun.org/tips/224551CTO:http://database.51cto.com/art/201005/202686.htm

关键词: mysql安全 mysql配置 权限 关系型数据库
分享到:

相关阅读

栏目最新

点击排行