NỘI DUNG
Bước 1: SSH vào server Linux
Để thực hiện bạn cần ssh vào máy chủ với quyền root. Nếu bạn chưa biết cách SSH bạn có thể thực hiện theo hướng dẫn bên dưới nhé.
Bước 2: Điều chỉnh file cấu hình mysql
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
/etc/mysql/my.cnf
Đầu tiên bạn hãy mở file my.cnf lên. Sau đó tìm giá trị bind-address = 127.0.0.1, với dòng này có nghĩa là máy chủ sẽ chỉ tìm kiếm các kết nối cục bộ. Và bạn cần thay đổi giá trị này bằng IP cố định của bạn, hoặc sử dụng *, :: hoặc 0.0.0.0 để cho phép tất cả các kết nối.
Bước 3: Cấu hình Firewall
- Đối với UFW (Uncomplicated Firewall)
UFW là công cụ tường lửa mặc định trong Ubuntu, bạn cần mở cho phép IP hoạt động trên port 3306
ufw allow from remote_ip_address to any port 3306
- Đối với FirewallD
FirewallD là ứng dụng firewall mặc định của CentOS. Bạn cần tạo một zone mới để cho phép IP truy cập.
firewall-cmd --new-zone=mysqlrule --permanent
firewall-cmd --reload
firewall-cmd --permanent --zone=mysqlrule --add-source=11.22.33.44
firewall-cmd --permanent --zone=mysqlrule --add-port=3306/tcp
firewall-cmd --reload
- Đối với iptables
iptables có sẵn trên hầu hết các bản phân phối mặc định của Linux. Bạn sử dụng lệnh sau để mở
#Cho phép tất cả kết nối qua cổng 3306
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# Cho phép IP được chỉ định kết nối qua cổng 3306
iptables -A INPUT -p tcp -s 11.22.33.44 --dport 3306 -j ACCEPT
#Lưu lại cấu hình
service iptables save
Bước 4: Bật Remote MySQL Server
Trong bài viết này mình sẽ chủ thích một số dòng và bạn hãy thay đổi bằng thông tin của bạn.
- user_1: Tên user
- database1: Tên Database
- %: Giá trị % sẽ cho phép tất cả IP access vào
- 11.22.33.44: IP được chỉ định access vào
- *.: Áp dụng toàn bộ Database
Trường hợp 1: Cho phép kết nối với tất cả IP và Tất cả User
Ở trường hợp này sẽ cho phép bạn kết nối với tất cả IP access vào và sẽ nhìn thấy tất cả các Database trên đó. Trường hợp này ít dùng vì mang tính nguy hiểm do access được tất cả DB
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'user_1'@'%' IDENTIFIED BY 'Mat_Khau_User_Database' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Trường hợp 2: Cho phép kết nối với tất cả IP với Database nhất định
Trường hợp này thường sử dụng nhiều. Khi bạn sử dụng trường hợp này thì tất cả IP sẽ access được và chỉ access vào duy nhất Database chỉ định khi remote qua user/passwd
mysql -u root -p
GRANT ALL PRIVILEGES ON database1.* TO 'user_1'@'%' IDENTIFIED BY 'Mat_Khau_User_Database' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Trường hợp 3: Cho phép kết nối với IP và Database cố định
Trường hợp này khi bạn cấu hình chỉ định thì chỉ duy nhất IP bạn chỉ định mới được quyền access vào. Với các IP khác sẽ không thể truy cập vào được.
mysql -u root -p
GRANT ALL PRIVILEGES ON database1.* TO 'user_1'@'11.22.33.44' IDENTIFIED BY 'Mat_Khau_User_Database' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Sau mỗi thiết lập bạn cần khởi động lại dịch vụ MySQL để áp dụng thay đổi. Bạn hãy khởi động với lệnh sau
systemctl restart mysql
Bước 5: Bật Remote MySQL Server với DB có sẵn
Đối với Database có sẵn bạn sử dụng cách này để cập nhật quyền.
mysql -u root -p
update db set Host=’11.22.33.44' where Db='yourDB';
update user set Host=’11.22.33.44' where user='user1';