1. 程式人生 > >Ubuntu下開放遠端連線

Ubuntu下開放遠端連線

有時候我們的程式可能需要連線到遠端資料庫,但是遠端連線涉及到了安全性的問題,而今天要為大家講解一下如何在Ubuntu下開放MySQL的遠端連線許可權。

我的伺服器選擇的是Linode,執行環境是Ubuntu 16.04 LTS,已經安裝了MySQL 5.7

首先我們需要在MySQL中新建立一個使用者(現在推薦的方式是CREATE USER而非GRANT ... TO):

mysql> CREATE USER 'my_test_user'@'%' IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.00 sec)

接下來,我們給使用者相應的許可權可以訪問table

mysql> GRANT SELECT ON my_test_db.some_table TO 'my_test_user';

以上語句給予my_test_user這個使用者對於my_test_db資料庫中some_table這張表的SELECT許可權。

現在我們使用者和許可權都有了,接下來就是要讓伺服器接受遠端連線。在Ubuntu的命令視窗中,輸入

$ netstat -nat | grep :3306
tcp         0           0   127.0.0.1:3306      0.0.0.0:*   LISTEN

可以看到,現在伺服器只允許本地連線。我們輸入

$ vim /etc/mysql/my.cnf

將其中bind-address = 127.0.0.1這行使用#註釋掉。
注意,如果mysql版本比較新,my.cnf中找不到這行,那麼請輸入

$ vim /etc/mysql/mysql.conf.d/mysqld.cnf

在該檔案下尋找並註釋。
完成後儲存退出,並重啟mysql伺服器:

$ systemctl restart mysql

再次輸入netstat -nat | grep :3306,我們發現伺服器已經可以進行遠端連線了:

$ netstat -nat | grep :3306
tcp6    0   0   :::3306
:::*

然後,我們只需要提供遠端伺服器的ip地址,使用者賬號和密碼,就可以進行連線了:

$ /usr/bin/mysql -u my_test_user -h xxx.xxx.xxx.xxx -p

如果使用的是MySQL C++ Connector,正常程式碼進行連線即可:

conn = driver->connect("tcp://xxx.xxx.xxx.xxx:3306", "my_test_user", "mypassword");

注意:如果你使用了阿里雲或者其他的雲伺服器,那麼你需要在安全分組裡新增一條規則,允許MySQL的連線,即在inbound rule中新增允許0.0.0.0/0連線3306埠的規則。