欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

mysql创建用户报错ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 有大用

今天在mysql中创建用户时,看到有人用的时直接往user表中插数据的方法,如下所示:

mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

于是我也在数据库中尝试用此方法创建用户,却得到如下报错:

mysql> insert into mysql.user(Host,User,Password) values('localhost','siu',password('siu'));       
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value


出现错误的原因是mysql默认配置严格模式,该模式禁止通过insert的方式直接修改mysql库中的user表进行添加新用户。
解决方法是修改my.ini(Windows系统)或my.conf(Linux系统)配置文件,以linux系统为例将:

sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

修改成:

sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

然后重启mysql服务

service mysql restart

再次创建用户便可以成功了

mysql> insert into mysql.user(Host,User,Password) values("localhost","joey",password("1234"));    
Query OK, 1 row affected, 3 warnings (0.00 sec)


但是需要注意的是,既然mysql默认是禁止这种方法来创建用户是为了数据库的安全,所以我们也应该避免用插入的方式来创建用户。正确的创建用户的方式是:

mysql> create user 'joey'@'localhost' identified by 'joey';
Query OK, 0 rows affected (0.00 sec)

然后为某些数据库给这个用户授权:

grant all privileges on joey.* to 'joey'@'localhost' identified by 'joey';  ? 
# joey.* 表示数据库joey上的所有表  'joey'@'localhost'表示localhost上的用户 joey ;
# identified by 'joey'表示密码为 joey Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)


来自  https://blog.csdn.net/WeakFantasy/article/details/53886707



[mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

我的MySQL版本为5.6.14版本,是二进制包安装的(虽然是二进制包安装的,但是以下问题同样适用于源码安装包安装的MySQL)

今天在我的测试库上添加一个新用户,报错:

[mysql@ydrh2 ~]$ mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.14-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> insert into user(host,user,password) values("localhost","peter1",password("123456"));
ERROR 1046 (3D000): No database selected
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> insert into user(host,user,password) values("localhost","peter1",password("123456"));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

原因:在我的配置文件my.cnf中有这样一条语句
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
指定了严格模式,为了安全,严格模式禁止通过insert 这种形式直接修改mysql库中的user表进行添加新用户

解决办法:
将配置文件中的STRICT_TRANS_TABLES删掉,即改为:
sql_mode=NO_ENGINE_SUBSTITUTION
然后重启mysql即可

要是还不能解决,请使用下面的方式:

本文向大家讲解的是Mysql添加用户错误:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value解决方法,感兴趣的同学参考下。

错误描述:

添加用户 insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

报以下的错误 ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value错误

mysql5.1以上版本,我是在5.6版本上操作的。

错语原因:

mysql用户表的中某些字段不能为空,没有默认值,其实是操作错误,mysql添加用户是不能这样直接insert user表的。

解决方法:

正确的添加用户方法:

GRANT USAGE ON . TO 'user01'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

用户:user01,密码:123456,这样就添加了一个新的用户,不会出以上的错误了。


来自  https://www.jianshu.com/p/685901521898


普通分类: