允許遠端連線到MySQL資料庫伺服器的步驟

安全劍客發表於2019-12-20
下面介紹允許遠端連線到MySQL伺服器所需的步驟。同樣適用於MariaDB。

預設情況下,MySQL伺服器僅偵聽來自localhost的連線,這意味著只能由執行在同一主機上的應用程式訪問它。
但在某些情況下,有必要允許遠端連線。比如你想要從本地系統連線到遠端MySQL伺服器,或者使用多伺服器部署、應用程式與資料庫伺服器不在同一臺機器上執行時。

允許遠端連線到MySQL資料庫伺服器的步驟允許遠端連線到MySQL資料庫伺服器的步驟

配置MySQL伺服器

第一步是設定MySQL伺服器,以偵聽機器上的某個特定IP地址或所有IP地址。
如果MySQL伺服器和客戶端可以透過專用網路相互通訊,那麼最好的選擇是設定MySQL伺服器,僅偵聽專用IP。否則,如果你想透過公共網路連線到伺服器,就設定MySQL伺服器,偵聽機器上的所有IP地址。
為此,你需要編輯MySQL配置檔案,新增或更改bind-address選項的值。你可以設定單個IP地址和IP範圍。如果地址是0.0.0.0,MySQL伺服器接受所有主機IPv4介面上的連線。如果你在系統上配置了IPv6,改而使用::,而不是0.0.0.0。
MySQL配置檔案的位置因發行版而異。在Ubuntu和Debian中,該檔案位於/etc/mysql/mysql.conf.d/mysqld.cnf,而在基於Red Hat的發行版(比如 )中,該檔案位於/etc/my.cnf。
使用文字編輯器開啟檔案:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

搜尋以bind-address開頭的行,將其值設定為MySQL伺服器應偵聽的IP地址。
預設情況下,該值被設定為127.0.0.1(僅在localhost中偵聽)。
在這個例子中,我們將值改為0.0.0.0來設定MySQL伺服器,偵聽所有IPv4介面:

mysqld.cnf
bind-address = 0.0.0.0
# skip-networking

如果有一行含有skip-networking,刪除該行或透過在行開頭新增#來註釋掉它。
在MySQL 8.0及更高版本中,bind-address指令可能不存在。在這種情況下,將其新增到[mysqld]部分下。
完成後,重新啟動MySQL服務以使更改生效。只有root使用者或擁有sudo許可權的使用者才能重新啟動服務。
想在Debian或Ubuntu上重新啟動MySQL服務,請輸入:

 sudo systemctl restart mysqld

在基於RedHat的發行版(比如CentOS)上,想重新啟動服務,執行:

sudo systemctl restart mysql
授權使用者從遠端機器來訪問

下一步是允許遠端使用者訪問資料庫。
輸入以下內容,以root使用者身份登入MySQL伺服器:

$ sudo mysql

如果你使用舊的原生MySQL驗證外掛以root使用者身份登入,請執行以下 ,出現提示時輸入密碼:

$ mysql -uroot -p

從MySQL  裡面,使用GRANT語句為遠端使用者授予訪問許可權。

mysql> GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

其中:

  • database_name是使用者將連線到的資料庫的名稱。
  • user_name是MySQL使用者的名稱。
  • ip_address是使用者將連線的IP地址。使用%允許使用者從任何IP地址進行連線。
  • user_password是使用者密碼。

比如說,要授予名為foo、使用密碼my_password的使用者從IP是10.8.0.5的客戶端機器訪問資料庫dbname,你要執行:

mysql> GRANT ALL ON dbname.* TO foo@'10.8.0.5' BY 'my_passwd';

配置防火牆
最後一步是配置防火牆配置,允許來自遠端機器的透過埠3306(MySQL預設埠)入站的流量。
Iptables

如果你使用iptables作為防火牆,以下 將允許從網際網路上的任何IP地址訪問MySQL埠。這很不安全。

$ sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

允許從特定IP地址訪問:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT
UFW

UFW是Ubuntu中的預設防火牆工具。要允許從網際網路上的任何IP地址進行訪問(很不安全),請執行:

$ sudo ufw allow 3306/ tcp

允許從特定IP地址訪問:

sudo ufw allow from 10.8.0.5 to any port 3306
FirewallD

FirewallD是CentOS中的預設防火牆管理工具。要允許從網際網路上的任何IP地址進行訪問(很不安全),請輸入:

$ sudo firewall-cmd --permanent --zone = public --add-port = 3306/ tcp  
$ sudo firewall-cmd --reload

要允許從特定埠上的特定IP地址進行訪問,你可以建立新的FirewallD區域或使用豐富的規則。不妨建立一個名為mysqlzone的新區域:

$ sudo firewall-cmd --new-zone=mysqlzone --permanent  
$ sudo firewall-cmd --reload  
$ sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32  
$ sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp  
$ sudo firewall-cmd --reload
驗證更改

要驗證遠端使用者可以連線到MySQL伺服器,請執行以下命令:

mysql -u user_name -h mysql_server_ip -p

其中user_name是你授予訪問許可權的使用者的名稱,mysql_server_ip是執行MySQL伺服器的主機的IP地址。
如果一切設定正確,你就能夠登入到遠端MySQL伺服器。
如果你收到如下錯誤,埠3306未開啟,或者MySQL伺服器未偵聽IP地址。

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

以下錯誤表明你嘗試登入的使用者沒有訪問遠端MySQL伺服器的許可權。

"ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server"

MySQL是預設流行的開源資料庫伺服器,它僅偵聽來自localhost的入站連線。
要允許遠端連線到MySQL伺服器,你需要執行以下步驟:
1. 配置MySQL伺服器,偵聽所有介面或特定介面。
2. 授予遠端使用者訪問許可權。
3. 開啟防火牆中的MySQL埠。

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2669652/,如需轉載,請註明出處,否則將追究法律責任。

相關文章