MySQL allow remote access
Gin 2020-08-20 MySQL
# Summary
前一陣子在使用 ELK,想把 MySQL 的資料 sync 到 ELK,需要把 MySQL 設為可以給外部連線,所以紀錄一下有哪些步驟。
# Step 1. 編輯 MySQL config
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
1
# Step 2. 編輯 bind-address 為 0.0.0.0
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
1
2
3
4
2
3
4
修改成
bind-address = 0.0.0.0
1
Restart MySQL
sudo service mysql restart
1
值為 127.0.0.1
表示僅 localhost 可以進行連線,而如果設為 0.0.0.0
則允許外部連到 MySQL。
# Step 3. 新增 MySQL 使用者
CREATE USER 'username'@'localhost' IDENTIFIED BY 'user_password';
1
username
: 自行替換為你想要的使用者名稱localhost
: 此處為 host,如果值為localhost
表示僅允許這個使用者在這台機器上做連線,其他主機不行(SSH 除外),如果要外部連線,請設想連線主機的 IP,或也可以使用%
代表任何主機都可以進行連線,請謹慎使用%
,盡量將權限、可連線的來源最小化。user_password
: 使用者密碼
# Step 4. Grant privileges
GRANT ALL PRIVILEGES ON database_name.table_name TO 'username'@'localhost';
GRANT SELECT, INSERT, DELETE ON database_name.* TO 'username'@'localhost';
1
2
3
2
3
新增使用者的權限,僅允許 SELECT
, INSERT
, DELETE
, ALL PRIVILEGES
等,並且可以指定資料庫及資料表,例如:我想新增使用者僅允許讀取 development
資料庫的 users
資料表,則可以這樣設定:
GRANT SELECT ON development_.users TO 'jay'@'localhost';
1
Revoke privileges
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
1
# Step 5. 遠端連線
mysql -u username -p -h 'xxx.xxx.xxx.xxx'
1