MySQL數據庫新建用戶並為用戶設置權限


  業務需要,今天我在數據庫中創建新用戶,結果報錯了,語句及報錯如下:

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM