在mysql5.*版本中使用
mysql> insert into user(host,user,password)values('localhost','lewis',password('123'));
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
執行后報錯 ERROR 1054(42S22) Unknown column 'password' in ‘field list’
錯誤的原因是 5.7版本下的mysql數據庫下已經沒有password這個字段了,password字段改成了authentication_string
所以,插入用戶的正確的用法是
mysql> insert into user(host,user,authentication_string) values('localhost','lewis','123');
報錯: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默認是禁止這種方法來創建用戶是為了數據庫的安全,所以我們也應該避免用插入的方式來創建用戶。正確的創建用戶的方式是:
create user '用戶名'@'主機名' identified by '123';
flush privileges; //刷新權限
但必須注意,這樣做有時也會出現一種問題:就是當你剛刪完一個用戶有要創建時
報錯:ERROR 1396 (HY000): Opertion CREATE USER failed for 'lewis'@'localhost'
原因:你可能使用了delete語句從user中刪除用戶,這種行為因該被禁止.
不允許,直接修改表,否則會有各種麻煩.
這個bug的解釋是:Assume the user is there, so drop the user
After deleting the user, there is need to flush the mysql privileges
Now create the user.(認為用戶仍在這里,所以應該再用drop語句刪除它,在delete 刪除語句后,應該立馬更新權限)
正確做法:
drop user 'lewis'@'localhost';
flush privileges;
create user 'lewis'@'localhost' identified by '123';
grant all privileges on test.* to lewis@localhost; //的到所有權限
flush privileges; //更新緩存
注意修改完表,flush privileges一下,否則會沒讀到緩存信息.