最近接受朋友的邀请为本地某公司开发一套Web版的销售管理系统,经过反复的讨论,最后决定选择Apache做为Web服务器,MySQL为数据库,PHP为开发平台建立这个系统。
在考虑到Apche和MySQL都非常稳定的同时,也考虑PHP强大的脚本语言功能也为实现这套系统提供了强有力的支持。经过近两个月的“煎熬”,终于推出了第一个试用的版本,随即给客户安装试用。兴奋的同时也感到了些许压力,因为大家觉得对MySQL都还没有非常深入的掌握,所以在提供试用版的时候,就向客户建议只录入些虚拟的数据进行测试,以免重要数据的丢失或失窃。
在所有的担心中,对MySQL数据库安全性的担心更多些。接下来大家把提高和增强MySQL安全性的任务交给了我,谁叫我是DBA呢,没办法。经过三天的搜集和整理,同时结合客户反映的实际情况,最后对MySQL做了一系列的调整和配置,不仅增强了安全性,还为将来的项目实施积累了难得的经验。
因为很多知识来源于书籍和网络,因此也想将这些经验与各位网友分享。
一、设置root和匿名用户的密码:
首先就是考虑如何设置DBA密码的问题,大家知道很多数据库在安装的过程中都会提示用户设置数据默认用户(root)的密码,而这些设置通常也正是容易被忽略的地方。一旦用户未设置root的密码,那么任何以root身份登陆的连接尝试都将可能获得MySQL的所有权限,后果也许将是灾难性的。因此笔者设置了字母+数字的组合式密码,同时强烈建议各位网友不要使用简单的数字作为密码,例如不要使用生日、用户名、电话号码或字典中的单词这些容易识别的启发式密码。
其实空密码可以是空或非空,不允许用通配符。一个空密码并不意味着匹配任何密码,它意味着用户必须不指定任何密码。密码以一个加密过的值存储在文件中的,不是一个字面上的明文文本。如果用户在Password列中存储一个照字面上的密码,用户将不能连接!
其次更容易被忽略的就是默认的匿名用户的密码,因为在默认设置下,这个匿名用户在localhost上几乎拥有和root一 样的权限,这也正是MySQL另外一个与其他类型的数据库不同的地方。熟悉PHP的朋友都知道,PHP有脚本语言的功能,功能虽然强大,但同时也带来了一定的安全隐患。试着写了一个 很简单的执行sql语句的 PHP文件上传上去,其中连接参数的user,password都设置成空,Host=Localhost,结 果发现我的SQL语句竟然可以顺利执行,于是执行select * from mysql.user;察看用户权限,发现这个用户在Localhost权限非常的高,连grant_priv的权限都有。令我们吃惊同时,接着又进行了另外一项测试,我用这个php页面创建一个新的用户,并grant给他较高的权限,结果一举成功,这样就可以用这个新用户通过本机的MySQL Client连接到客户网站的MySQL Server,并可以利用这个新建的用户管理权限对客户网站的MySQL Server进行管理了。当我想其他团队成员通告这个消息的时候,他们开始的时候没有一个相信,经过实际的演示后,大家都感慨数据库用户口令的重要性。
经过再三的讨论,最后我们大家都赞成将这个匿名用户删除,“斩草除根”以免后患。其实也可以使用更改root口令一样的方法设置这个匿名用户的密码:
Mysql> UPDATE user set password=PASSWORD(yournewpassword) where user=;
Mysql>FLUSH PRIVILEGES;因为大家对匿名用户的具体权限都不是非常的清楚,所以最后还是决定将这个用户删除,这虽然是个笨办法,但也是最有效的方法。







