Ubuntu下開放遠端連線
阿新 • • 發佈:2019-02-12
有時候我們的程式可能需要連線到遠端資料庫,但是遠端連線涉及到了安全性的問題,而今天要為大家講解一下如何在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
埠的規則。