MySQL8.0遠程連接和用戶授權相關設置

1、開啓MySQL遠程連接

mysql -u root -p #進入MySQL數據庫後進行一下操作。
mysql> use mysql;
mysql> update user set user.Host=’%’ where user.User=‘root’;
mysql> flush privileges;

注:將Host設置爲‘%’表示任意IP都能連接MySQL,也可以將‘%’改爲指定ip
在這裏插入圖片描述
如果遠程連接遇到如下報錯:

Unable to load authentication plugin 'caching_sha2_password'.

原因: 是因爲mysql8使用的是caching_sha2_password加密規則。
解決方法:

  1. 修改遠程連接用戶的加密規則。

mysql> ALTER USER ‘test’@’%’ IDENTIFIED WITH mysql_native_password BY ‘12345’;

  1. 修改配置文件。

#vi /etc/my.cnf
加入下面內容:default_authentication_plugin=mysql_native_password

2、關閉MySQL遠程連接

如果有關閉遠程連接的需求,其實我們只需要Host恢復成默認設置(只能本地連接)即可,如下:

mysql -u root -p #進入MySQL數據庫後進行一下操作。
mysql> use mysql;
mysql> update user set user.Host=‘localhost’ where user.User=‘root’;
mysql> flush privileges;

在這裏插入圖片描述
以上的操作都可以通過查看MySQL的user表的host、user字段來驗證是否修改成功:

mysql> select host,user from user;

在這裏插入圖片描述

3、修改防火牆規則,開放端口

如果服務器防火牆未關,在開啓了MySQL的遠程連接之後還需要進行防火牆的設置,開放其端口(如:3306),這裏以centos7爲例,其他版本的請自行百度,如下:

#centos7 開啓防火牆端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

在這裏插入圖片描述
參數說明:
    --zone         #作用域
    --add-port=3306/tcp   #添加端口,格式爲:端口/通訊協議
    --permanent      #永久生效,沒有此參數重啓後失效

systemctl restart firewalld #重啓防火牆,或者 firewall-cmd --reload(更新防火牆規則)
firewall-cmd --list-ports #查看已經開放的端口

在這裏插入圖片描述

systemctl status firewalld #查看防火牆狀態,或者 firewall-cmd –state

到此,基本就可以用工具遠程連接MySQL了。

4、創建用戶以及給用戶授權

  1. 授予 test 用戶擁有所有庫所有表的所有權限

在授予權限前先說一下MySQL8.0的新語法:
因爲MySQL8.0提升了安全級別,更加嚴謹,所以創建用戶並授權不能和以前一樣用一條SQL語句完成,現在必須先創建用戶設置密碼,再進行授權。

#以前可以直接用如下一條SQL:
mysql> grant all privileges on . to test@’%’ identified by ‘12345’;

如果在MySQL8.0中執行上面這個SQL會報SQL語法錯誤。

#在MySQL8.0中必須先創建任意主機可訪問的用戶:
mysql> create user test@’%’ identified by ‘12345’;
#然後再對用戶進行授權:
mysql> grant all on . to test@’%’; #privileges 可以省略!
mysql> flush privileges; #刷新權限

MySQL8.0創建用戶並授權
注意:在MySQL8.0中,如果創建了用戶並授予了all 權限,那麼即便用 root 用戶也可能無法刪除這些用戶,會報

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

如圖:
在這裏插入圖片描述
原因:這是由於MySQL8.0新增了一個SYSTEM_USER權限,如果創建用戶並授予all權限時,就會賦予SYSTEM_USER權限,而root用戶並沒有這個權限,所以無法刪除其他用戶。
解決辦法:

  • 不授予用戶all權限。(一般爲了安全是不可能給一個用戶授予all權限的,即便root也沒有all權限)

mysql> show grants for root@’%’;

在這裏插入圖片描述

  • 授予root用戶SYSTEM_USER,然後刪除其他用戶。

mysql> grant SYSTEM_USER on . to root@’%’;
mysql> flush privileges;
mysql> drop user test@’%’;

在這裏插入圖片描述

  1. 授予 test 用戶擁有所有庫所有表部分權限

mysql> grant select,insert,update on . to test@’%’;
mysql> flush privileges;

在這裏插入圖片描述
3. 授予 test 用戶擁有testdb庫所有表部分權限

mysql> grant select,insert,update on testdb.* to test@’%’;
mysql> flush privileges;

在這裏插入圖片描述
4. 授予 test 用戶擁有testdb庫test表的部分權限

mysql> grant select,insert,update on testdb.test to test@’%’;
mysql> flush privileges;

在這裏插入圖片描述
更多的權限請自行琢磨,或者一起來琢磨(滑稽.jpg)

5、刪除用戶及權限

mysql> drop user test@’%’;
mysql> drop user test1@localhost;


歡迎進羣:747509472 交流學習!感謝指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章