今天在mysql中創(chuàng)建用戶時,看到有人用的時直接往user表中插數(shù)據(jù)的方法袍祖,如下所示:
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
于是我也在數(shù)據(jù)庫中嘗試用此方法創(chuàng)建用戶抡爹,卻得到如下報錯:
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
出現(xiàn)錯誤的原因是mysql默認(rèn)配置嚴(yán)格模式风科,該模式禁止通過insert的方式直接修改mysql庫中的user表進(jìn)行添加新用戶丛版。
解決方法是修改my.ini(Windows系統(tǒng))或my.cnf(Linux系統(tǒng))配置文件莲兢,以linux系統(tǒng)為例將:
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改成:
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重啟mysql服務(wù)
service mysql restart
再次創(chuàng)建用戶便可以成功了
mysql> insert into mysql.user(Host,User,Password) values("localhost","joey",password("1234"));? ?
Query OK, 1 row affected, 3 warnings (0.00 sec)
但是需要注意的是汹来,既然mysql默認(rèn)是禁止這種方法來創(chuàng)建用戶是為了數(shù)據(jù)庫的安全,所以我們也應(yīng)該避免用插入的方式來創(chuàng)建用戶改艇。正確的創(chuàng)建用戶的方式是:
mysql> create user 'joey'@'localhost' identified by 'joey';
Query OK, 0 rows affected (0.00 sec)
然后為某些數(shù)據(jù)庫給這個用戶授權(quán):
grant all privileges on joey.* to 'joey'@'localhost' identified by '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