mysql8.0創建用戶授予權限報錯解決方法
問題一:8.0版本用之前的創建用戶和賦權一條語句的方式會報錯
會報錯的寫法:之前版本是沒問題的,但是8.0mysql會報語法錯誤
-- 創建用戶、設置密碼並且賦權
grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
-- 格式:grant 權限 on 數據庫教程名.表名 to 用戶@登錄主機 identified by "用戶密碼";
-- @ 后面是訪問mysql的客戶端ip地址(或是 主機名) % 代表任意的客戶端,如果填寫 localhost 為
-- 本地訪問(那此用戶就不能遠程訪問該mysql數據庫了)
mysql8.0中必須分開,先創建用戶、再給用戶賦值
-- 創建用戶 (如果執行這條語句報錯了:請參考問題二)
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
-- 給用戶分配權限
grant all privileges on *.* to 'myuser'@'%' ;
-- 單獨授予某種權限的寫法;具體再詳細的操作請參考其他文章
GRANT SELECT ON oilsystem.input TO 'myuser'@'%';
-- 刷新權限,使操作生效
FLUSH PRIVILEGES;
問題二:Mysql遠程連接報錯:authentication plugin caching_sha2
Mysql遠程連接報錯:authentication plugin caching_sha2
原因:mysql 8.0 默認使用 caching_sha2_password 身份驗證機制 之前版本的mysql使用的是: mysql_native_password
注:從之前版本升級 8.0 版本的不會改變現有用戶的身份驗證方法,仍然采用mysql_native_password的驗證方式;但新用戶會默認使用新的 caching_sha2_password 。
MySQL8默認的認證插件是caching_sha2_password,很多客戶端都不支持。故而連接報錯;
解決方案:
方案一:
-- 修改加密規則
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
-- 更新一下用戶的密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
-- 刷新權限
FLUSH PRIVILEGES;
方案二:修改my.cnf配置文件
將默認的認證插件修改為mysql_native_password
在my.cnf配置文件中增加配置:
default_authentication_plugin=mysql_native_password
