授权命令GRANT 语句的语法如下:
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
其中IDENTIFIED BY是可选子句,用来于指定mysql用户的口令。
既然是可选子句,那就是可以没有的子句。问题来了:
要是没有指定IDENTIFIED BY,会怎么样?
答案是可能导致一个安全漏洞:如果user是指现有用户,那么没有任何影响;但如果user是指新用户,那么该用户将不被赋予口令,也就是说,这样的语句会创建一个口令为空,且已有数据库操作权限的mysql用户!
那么要如何避免这样的情况发生呢?
不用担心,mysql自身已经给出了解决方案。在关于mysql运行模式的文档里有这样一段:
NO_AUTO_CREATE_USER:
One of Server SQL Modes,to prevent the GRANT statement from automatically creating new users if it would otherwise do so, unless a nonempty password also is specified.
即在NO_AUTO_CREATE_USER运行模式下,mysql会阻止任何创建空密码的用户。所以只要将mysql发运行模式指定为NO_AUTO_CREATE_USER,即可解决此问题。
指定运行模式的方法也很简单:
You can set the default SQL mode by starting mysqld with the --sql-mode="modes" option, or by using sql-mode="modes" in my.cnf。
即在启动mysqld时,使用--sql-mode="modes"选项,或者直接将sql-mode="modes"写到my.cnf里。
阅读(5519) | 评论(0) | 转发(0) |