Nếu bạn làm việc với cơ sở dữ liệu MySQL, chắc hiểu rõ thách thức bảo mật: tấn công SQL injection, brute force... Việc bảo vệ dữ liệu khi truy cập từ xa càng khó khăn hơn.
Có cách cấu hình MySQL cho phép kết nối từ xa, nhưng cần cẩn trọng vì điều này có thể làm database trở thành mục tiêu dễ dàng cho hacker. Nếu muốn cho phép kết nối từ xa an toàn, hãy tham khảo các bước dưới đây.
Trước khi bắt đầu
Trước khi thay đổi MySQL, hãy sao lưu database, đặc biệt trên server sản xuất (production). Mọi thay đổi đều có thể gây mất dữ liệu nghiêm trọng nếu có sự cố.
Thay đổi cài đặt kết nối có thể khiến bạn không truy cập được server sau đó. Nên thử nghiệm trên MySQL cục bộ trước khi áp dụng từ xa.
Cũng cần cách an toàn để kết nối server từ xa. SSH (Secure Shell) thường là lựa chọn tốt nhất, cho phép kết nối an toàn. Cũng dùng SSH cho server cục bộ (như Raspberry Pi).
Hướng dẫn này giả định bạn đã có quyền truy cập trực tiếp hoặc từ xa (qua SSH) vào server chạy MySQL.
Nếu chưa có truy cập SSH, bạn không thể cấu hình MySQL cho phép kết nối từ xa trừ khi tài khoản root MySQL đã cho phép. Hãy thiết lập kết nối SSH trước.
Chỉnh sửa file cấu hình MySQL
Bước đầu tiên: chỉnh sửa file cấu hình MySQL. Giả định bạn đã kết nối server và có quyền truy cập console.
Hoặc cấu hình MySQL cục bộ: terminal trên Mac/Linux, trình soạn thảo văn bản trên Windows.
- Linux: Mở terminal/SSH, gõ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf để chỉnh sửa bằng nano (vị trí mặc định).
- Windows: Mở File Explorer, truy cập thư mục cài MySQL (ví dụ: C:/Program Files/MySQL/MySQL Server 8.0). Mở file my.ini bằng Notepad. Nếu không có, hãy tạo file.
- Mac: Mở terminal, gõ sudo nano /usr/local/etc/my.cnf (file cấu hình mặc định nếu cài MySQL qua Homebrew).
Đường dẫn trên là mặc định. Nếu lệnh không chạy, hãy tìm thủ công các file my.cnf, mysqld.cnf hoặc my.ini.
Thiết lập địa chỉ IP Bind-Address an toàn
- Mở file cấu hình, dùng phím mũi tên tìm mục bind-address. Giá trị mặc định thường là 127.0.0.1 (chỉ cho phép kết nối cục bộ).
- Để cho phép kết nối từ IP công cộng của bạn, thay 127.0.0.1 bằng IP công cộng đó. Hoặc thay bằng IP thiết bị/server được phép kết nối.
- Để cho phép tất cả kết nối từ xa (rất rủi ro, không dùng cho production), thay 127.0.0.1 bằng 0.0.0.0.
- Ghi nhớ giá trị port trong mục Basic Settings. Mặc định là 3306. Có thể thêm dòng port = xxxx với giá trị port mong muốn.
- Lưu file: Linux/Mac nhấn Ctrl+O rồi Ctrl+X (Mac dùng Command). Windows: File > Save.
- Linux/Mac: Khởi động lại MySQL: mysql.server stop && mysql.server start hoặc mysql.server restart. Có thể cần sudo và đường dẫn đầy đủ (ví dụ: /usr/local/bin/mysql.server).
- Nếu lệnh trên thất bại, thử sudo service mysql restart.
- Windows: Mở PowerShell (Admin). Gõ net stop mysql80 rồi net start mysql80, thay mysql80 bằng tên dịch vụ thực tế.
Nếu không chắc tên dịch vụ, gõ net start để xem. Nếu không reload được cấu hình, hãy khởi động lại server.
Cấu hình Firewall
Lúc này MySQL đã cho phép kết nối từ IP đã thiết lập (hoặc tất cả nếu dùng 0.0.0.0). Tuy nhiên, firewall thiết bị/mạng vẫn chặn kết nối.
Hầu hết server/PC dùng firewall chặn cổng trừ khi được cấp phép. Cấu hình khác nhau tùy Windows hay Linux. Firewall Mac tắt mặc định, thường không cần cấu hình thêm.
Cấu hình Firewall Linux
Nhiều server Linux dùng iptables. Cách cấu hình:
- Mở terminal/SSH, gõ: sudo iptables -A INPUT -p tcp -s X.X.X.X --dport YYYY -j ACCEPT. Thay X.X.X.X bằng IP được phép kết nối từ đó, YYYY bằng port MySQL (ví dụ 3306).
- Để vĩnh viễn trên Debian/Ubuntu: sudo netfilter-persistent save và sudo netfilter-persistent reload.
Nếu iptables không phải mặc định, xem tài liệu distro. Nếu thiếu gói (như netfilter-persistent), cài qua kho phần mềm (ví dụ: sudo apt install netfilter-persistent).
Cấu hình Firewall Windows
Trên Windows Server/PC:
- Chuột phải menu Start, chọn Run.
- Gõ wf.msc, Enter.
- Chọn Inbound Rules > New Rule.
- Chọn Port > Next.
- Chọn TCP, gõ port 3306 (hoặc port từ file cấu hình), Next.
- Giữ mặc định Allow the connection, Next.
- Áp dụng cho tất cả loại mạng, Next.
- Đặt tên mô tả (ví dụ: MySQL), Finish.
Nếu vẫn không kết nối được, lặp lại tạo Outbound Rule với cùng thông tin. Có thể cần cấu hình router mạng cục bộ mở cổng cho kết nối vào/ra database.
Kết nối đến Server MySQL từ xa
Sau khi cấu hình, dùng lệnh mysql (mysql.exe trên Windows) từ terminal/PowerShell để kết nối.
Windows: cần cài MySQL cục bộ. Mac: brew install mysql. Linux: sudo apt install mysql.
Kết nối MySQL trên Linux/Mac
- Mở terminal, gõ: mysql -u username -h X.X.X.X:XXXX -p. Thay X.X.X.X:XXXX bằng IP server và port (ví dụ: 100.200.100.200:3306), username bằng user MySQL.
- Nhập mật khẩu khi được hỏi. Nếu thành công, thông báo hiện ra.
Kết nối MySQL trên Windows
- Mở PowerShell (Admin).
- Gõ cd "C:\Program Files\MySQL\MySQL Workbench 8.0\" (thay đường dẫn phù hợp phiên bản).
- Gõ .\mysql.exe -u username -h X.X.X.X:XXXX -p. Thay IP:port và username (có thể dùng root). Làm theo hướng dẫn trên màn hình.
- Nhập mật khẩu để hoàn tất.
Nếu thất bại, kết nối SSH vào server hosting MySQL, dùng đối số -h localhost, tạo user phù hợp theo bước dưới.
Cho phép user từ xa truy cập Database MySQL
Đến đây bạn có thể kết nối từ xa bằng user root hoặc user có quyền cao. Vì không an toàn, nên tạo user hạn chế hơn.
User này chỉ truy cập database được chỉ định, không thể tạo user mới hay truy cập database khác.
Cần có khả năng đăng nhập MySQL từ xa. Nếu root không cho phép từ xa, truy cập shell server qua SSH hoặc trực tiếp.
- Trong shell MySQL từ xa, gõ: CREATE USER "username"@"x.x.x.x" IDENTIFIED BY "password";. Thay username, x.x.x.x (IP kết nối), password.
- Cấp quyền: GRANT ALL ON databasename.* TO username@"x.x.x.x";. Thay databasename, username, IP. Dùng * thay databasename để cấp quyền tất cả database.
Sau khi cấp quyền, dùng lệnh kết nối từ xa với user mới (ví dụ: mysql -u username -h X.X.X.X:XXXX -p).
Bảo mật dữ liệu Database
Dù MySQL hay SQL khác, bảo mật kết nối là then chốt. Tạo SSH key cho truy cập từ xa thay vì dùng mật khẩu dễ đoán.
Lo ngại mất dữ liệu? Sao lưu database online tự động. Hầu hết server Linux — dễ dàng tự động sao lưu file. Trên Windows cũng có thể thiết lập sao lưu tự động tương tự để khôi phục khẩn cấp.