"MYSQL数据库的安全漏洞及防范方法"
MYSQL数据库是当前最广泛使用的关系型数据库管理系统之一,其主页为http://www.mysql.com/,它可以在多平台上工作,既可以作为服务器同时也可以作为客户端。但是,在日常使用过程中,笔者发现匿名用户的设置很可能造成漏洞,给管理员带来毁灭性的灾难。
匿名用户的权限
当连接一个MYSQL服务器时,通常需要使用一个用户名和密码。但是,在安装完MYSQL后,它会自动创建一个ROOT用户和一个匿名用户,其初始密码都是空的。很多参考资料上都会提醒大家要注意及时设置一个密码,而忽略了匿名用户的设置。然而,这个匿名用户在LOCALHOST上几乎拥有和ROOT一样的权限。如果此时MYSQL是要提供给WEB服务器作数据库服务的,忽略这个匿名用户的代价可能相当惨重。
测试
为了测试,我写了一个简单的PHP文件上传到个人主机,其中连接字符串中的“USER,PASSWORD”为空, “HOST = LOCAL_HOST” 。结果发现SQL语句可以执行。于是执行SELECT FROM MYSQL.USER察看用户权限,发现这个用户在LOCAL_HOST权限 非常高,在GRANT PRIVILEGES有全部权限。
改进后的设置
经过改进,发现进行列操作能让数据库避免以上情况。
1. 在安装完成MYSQL后,不仅改变ROOT用户的密码,也同时改变匿名用户的密码,方法类似改变ROOT用户的密码的方式:MYSQL> UPDATE USER SET PASSWORD=PASSWORD('YOUR_NEW_PASSWORD') WHERE USER=''; MYSQL> FLUSH PRIVILEGES;
2. 如非必要,删除这个匿名用户,这样所有人要使用MYSQL都必需提供用户名,即便日后出了问题,也容易查找问题的源头。
3. 除了ROOT用户外,其他用户包括匿名用户(如果没有删除这个用户)不直接拥有GRANT权限,防止权限不受控制的扩散出去。
4. 赋予用户UPDATE、CREATE、DROP权限的时候,应该限定,防止权限不受控制的扩散出去。
MYSQL数据库的安全漏洞是非常危险的,但是通过合理的设置和权限管理,可以避免这些漏洞的出现。