背景:mysql的严格模式有一句:my.cnf加了:sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",中间有一个:NO_AUTO_CREATE_USER。
参看:https://jackxiang.com/post/6810/
以前一直使用如下面的语句给mysql服务器添加用户:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx;
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx@localhost;
set password for xxx@'%' = password(xxx);
set password for xxx@'localhost' = password(xxx);
flush privileges;
谁知道今天在另一个Mysql服务器上照葫芦画瓢出了问题,抱错说:
ERROR 1133 (42000): Can't find any matching row in the user table
Google了一下,原来Mysql还有一个模式控制这个,那就是NO_AUTO_CREATE_USER模式。
也就是说,如果在mysql客户端中运行:
mysql> set sql_mode = 'no_auto_create_user';
那么,上述的语句将不能成功,原因是没有提供用户密码,解决的办法是添加一个indentified 子句,例如:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx identified by 'xxx';
另外,要注意的是,空密码是不认的,例如:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx identified by ''; 就不行。
关于服务器模式的详细文档见:
http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
参看:https://jackxiang.com/post/6810/
以前一直使用如下面的语句给mysql服务器添加用户:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx;
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx@localhost;
set password for xxx@'%' = password(xxx);
set password for xxx@'localhost' = password(xxx);
flush privileges;
谁知道今天在另一个Mysql服务器上照葫芦画瓢出了问题,抱错说:
ERROR 1133 (42000): Can't find any matching row in the user table
Google了一下,原来Mysql还有一个模式控制这个,那就是NO_AUTO_CREATE_USER模式。
也就是说,如果在mysql客户端中运行:
mysql> set sql_mode = 'no_auto_create_user';
那么,上述的语句将不能成功,原因是没有提供用户密码,解决的办法是添加一个indentified 子句,例如:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx identified by 'xxx';
另外,要注意的是,空密码是不认的,例如:
grant CREATE, DROP,INSERT, SELECT, DELETE, UPDATE,ALTER on xxx.* to xxx identified by ''; 就不行。
关于服务器模式的详细文档见:
http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7446/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表