MySQL安全问题的一点心得 |
前两天在帮朋友 整顿他的主页空间时候,发现的丝毫关于MySQL可能大家都会 忽略的问题:我们晓得,在安装完MySQL后,它会自动 缔造一个root消费者和一个匿名消费者,其初始密码都是空,关于前者,众多参考 材料上都会 揭示大家要 留神及时设定一个密码,而 忽略了后者,大约是由于后者默许设定为不得不在本机 使用的缘故吧 。 但假如你的MySQL是要提供应Web服务器作数据库服务的, 忽略这个匿名消费者的代价可能相当惨重,由于在默许设置下,这个匿名消费者在localhost上 几乎 占有和root一样的权限,这时候,假如你的客户 占有上传脚本文件、脚本文件 可以进行MySQL数据库操作( 比方同意操作MySQL的php)的权限已经可能将你的MySQL 改变得面目全非了: 我今日帮朋友 整顿他的主页空间的时候,试着写了一个很 方便的执行sql语句的php文件上传上去,其中衔接字中的user,password我都试着置空,host=localhost, 后果发现我的sql语句 可以执行,于是执行select * from MySQL.user 视察消费者权限,发现这个消费者在localhost权限十分高,连grant_priv都有,( 视察的时候,会发现在root消费者下有两行消费者名、密码为空的,但各项权限有y\n的,便是这个匿名消费者当地、远程权限设置了) 所以我试着用这个php页面 缔造一个新消费者,并grant给他较高的权限, 后果一举 顺利,这样我就 可以用这个新消费者通过我本机的MySQL client衔接到这个网站的MySQL server,并用这个新 构建的消费者的治理权限对这个网站的MySQL server进行治理,看到自己 可以进行这样轻易 获得 深刻的数据库操作,我怎么还敢把朋友的主页空间的敏感 材料放入这个MySQL server呢? 改良 提议: 1、在安装 实现MySQL 后,不只转变root消费者的的密码,也和时转变匿名消费者的密码, 步骤 类似转变root的密码的 模式: MySQL> UPDATE user set password=PASSWORD('yournewpassword') where user=''; MySQL>FLUSH PRIVILEGES; 2、如非必要,删除这个匿名消费者,这样全部人要 使用MySQL 都必须提供消费者名, 即便日后出了问题,也方便搜索问题的源头 。 3、除了root消费者外, 其余消费者包含匿名消费者(假如没有删除这个消费者)不应该 占有grant权限, 预防治理权限不受操纵的扩散出去 。 4、给予消费者update\delete\alert\create\drop权限的时候,应该限定到特定的数据库,尤其要幸免一般客户 占有对MySQL数据库做操作的权限,不然你的系统设置很可能被替换掉 。 5、 审查MySQL.user表, 取缔 毋庸要消费者的shutdown_priv,reload_priv,process_priv和File_priv权限,这些权限可能 透露更多的服务器信息包含非MySQL的其它信息出去 。 6、假如不打算让你的消费者 使用MySQL数据库,在提供诸如php这样的脚本语言的时候,再一次设置或编译你的php, 取缔它们对MySQL的默许 支撑 。 |