如何提高MySQL数制库的安全性
如何提高MySQL数制库的安全性
当一个项目拥有大量的用户和数据信息需要处理的时候,数据库的安全性也就显得尤其重要,无论是在服务端还是客户,特别是在开始连接到MYSQL数据库到网站的时候都有可能产生安全问题。本文就来说一说该如何防范和提高MySQL数据库的安全性。
一、从操作系统角度来保护MySQL
如果你的MySQL正运行在类似于UNIX的操作系统中,那么以root用户的身份运行MySQL服务器(mysqld)是一个非常错误的选择。因为,这可以赋予一个MYSQL普通用户读写操作系统任何地方的文件的权限。这一点是非常重要的,但又是容易被忽略的,这是曾经用来攻击APACHE网站的常用方法之一。
因此,创建一个专门用运行mysqld的特定MySQL用户是一个好主意。此外,还可以建立只能够由MySQL用户访问的目录。当然更理想的办法是,应该将MySQL服务器建立于防火墙后。这样,MySQL服务器就可以终止来自未授权机器上的连接,检查一下是否可从服务器之外,以端口号为3306的方式连接MySQL。这是MySQL运行的默认端口,可以在防火墙中关闭它。
二、设置用户密码
必须确认MySQL的所有用户都有密码(特别是ROOT用户)并且要选好这些密码,定期修改,与使用操作系统密码一样。我们要记住的基本原则是不要使用纯字母作为密码,一般数字和字母的结合是最好的方案。
如果在脚本中保存用户密码,请确认只有密码保存在该脚本中的用户可以阅读该脚本。用来连接数据库的PHP脚本需要能够访问的那个用户的密码。将登录名和密码保存在一个PHP脚本可能是安全的,这样可以在需要的时候包含这个文件。这个脚本必须小心的保存在WEB文档结构以外,并且只能由特定的用户进行访问。
不要以纯文本的形式将密码保存于一个数据库中。 MySQL密码不能这样保存的,但是在WEB应用程序中通过也要保存网站用户的账户和密码。可以用MD5和MySQL的SHAl()函数将密码加密后再进行保存。如果运行在SELECT语句的时候,以这些格式之一使用INSERT插入一个密码时,必须再次使用相同的函数检查用户输入的密码。
3、用户权限
关于MySQL的权限问题大家可以去网上找资料学习,这里就不详细的介绍了。不要授予任何用户不必要的权限,可以查看grant表来确认用户的权限。如果不是绝对需要,请不要将PROCESS、FILE、SHUTDOWN和RELOAD等权限授予任何非管理员的用户。
GEANT权限也要在授予的时候非常小心,因为它允许用户将他们的权限分享给其他用户。请确认在建立用户的时候,只授予他们从当连接的主机访问数据库的权限。我们还可以通过在HOST表中使用IP地址而不是域名来提高安全性。这可以在DNS位置避免错误问题或者黑客入侵。可能通过启动MySQL后台程序--skip-name-resolve选项加强它,该选项的意思是所有主机列的值必须是IP地址或本机主机。
此外,还应该防止非管理员用户访问WEB服务器中的mysqladmin程序。因为这是从命令行运行的,它是操作系统权限的问题。
4、WEB问题
当连接MYSQL数据库到网络的时候,一些特殊的安全问题就出现了。建立一个专门用于网络连接的用户是一个不错的主意。这样可以授予他们必要的、最少的权限,不给用户一些重要的权限,例如DROP、ALTER、CAREATE权限。此外,这还是如何应用最少权限原则的例证。
应该经常检查来自用户的所有数据。即使HTML表单中由选项框和按钮组成,一些人还是可能通过企图修改URL以进入脚本。如果用户输入的密码或机密数据需要保存在数据库中,请注意,如果不使用SSL,这些数据将以纯文本的方式从浏览器传递到服务器。