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加密規則。
解決方法:
- 修改遠程連接用戶的加密規則。
mysql> ALTER USER ‘test’@’%’ IDENTIFIED WITH mysql_native_password BY ‘12345’;
- 修改配置文件。
#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、創建用戶以及給用戶授權
- 授予 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中,如果創建了用戶並授予了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@’%’;
- 授予 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 交流學習!感謝指正!