因為安全性的考量,MySQL 預設是不允許遠端裝置連線本地端的資料庫。的確,允許其他裝置直接對資料庫進行存取的風險極高,不過有時侯我們總是需要遠端控制我們的資料庫,像是進行測試、初期的建置、伺服器間的相互連線、使用 user 端圖形化介面存取資料庫等。
允許遠端連線:開啟連接埠、建立使用者並允許權限
1. 開啟 Port 3306
MySQL 預設的 Port 是 3306,必須先開啟伺服器的連接埠,並確認防火牆的設定。尤其如果是建立在 GCP、AWS等雲端伺服器上,也要同時確認專案的防火牆設定。
2. 建立使用者
我們必須盡量避免使用 root 帳號,可以的話,建立一個新的使用者用來遠端存取資料庫。先以 root 帳號進入 MySQL 的 Console:
> mysql -u root -p
建立使用者名稱及密碼:
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'PASSWORD'
除了使用者名稱及密碼,這裡必需指定使用者的主機位置。過去的 MySQL 可以開啟全域的遠端連線權限,也就是允許任何的 IP 來源存取資料庫,在 MySQL 3 之後似乎已經不被允許這樣的設定。
參數如上方指令:建立一個使用者 user、密碼為 PASSWORD,位在本地端 localhost。若要建立遠端連線,就必須將 localhost 替換成遠端主機的 IP 位置。
例如我想用家裡的電腦連上資料庫,那就必須建立一個使用者並把家裡電腦的 IP 位置指定給 user,因為除了此一 IP 位置來源,資料庫一律會拒絕存取。
3. 給定使用者存取權限
mysql > GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';
指定位於 localhost 的使用者 user 存取 database_name 資料庫,給定所有存取權限。
你也可以指定使用者存取伺服器上所有資料庫的權限,只需將資料庫名稱替換成 * 即可:
mysql > GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
同樣的,記得將使用者名稱、IP 位置、資料庫名稱等替換成你的名稱。
4. 重新載入使用者權限設定
mysql> FLUSH PRIVILEGES;
通知伺服器重新載入權限設定,之後再以新建立好的帳號登入就能成功存取資料庫了。
Copyright announcement:
The featured image: Photo by Jan Kolar / VUI Designer on Unsplash