Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1289523
  • 博文数量: 107
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 15:33
文章分类

全部博文(107)

文章存档

2021年(2)

2016年(8)

2015年(8)

2014年(10)

2013年(20)

2012年(38)

2011年(21)

分类: Mysql/postgreSQL

2011-09-06 18:42:46

授权命令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) |
给主人留下些什么吧!~~