業務需要,今天我在數據庫中創建新用戶,結果報錯了,語句及報錯如下:
insert into mysql.user(Host,User,Password) values("%","POSTHRIB",password("mysql!@#")); 報錯: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
如圖:
錯誤的原因是 5.7版本下的mysql數據庫下已經沒有password這個字段了,password字段改成了authentication_string,好吧,那就改一下insert語句,如下:
insert into mysql.user(Host,User,authentication_string) values("%","POSTIB",password("eHRmysql!@#")); 報錯: ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
如圖:
出現錯誤的原因是mysql默認配置嚴格模式,該模式禁止通過insert的方式直接修改mysql庫中的user表進行添加新用戶。
解決方法是修改my.ini(Windows系統)或my.conf(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來創建用戶的,那么我們也應該避免用插入的方式來創建用戶。正確的創建用戶的方式是:create mysql.user 'userName'@'ip' identified by 'password';。userName:新建用戶的賬號;ip:指定新建用戶登錄數據庫的IP,如果不做登錄IP限制,則用%表示;password:新建用戶的密碼。比如創建POSTIB用戶,密碼為eHRmysql!@#,不限制登錄地點:
create mysql.user 'POSTIB'@'%' identified by 'eHRmysql!@#';
然后是給用戶設置權限,權限的分類很多,這里列舉幾個。
1、授予某數據庫的所有權限,給POSTIB賦予數據庫demo的所有權限;
grant all privileges on demo.* to 'POSTIB'@'%';
2、授予某數據庫某表的增刪改查權限。
grant select,update on demo.test to POSTIB@'%' identified by ‘eHRmysql!@#’;
授予權限以后,別忘了刷新權限表:
flush privileges;