Cách cho phép truy cập từ xa vào máy chủ cơ sở dữ liệu MariaDB / MySQL

Tác giả Network Engineer, T.Mười 23, 2021, 07:45:54 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Cách cho phép truy cập từ xa vào máy chủ cơ sở dữ liệu MariaDB / MySQL


MariaDB là một hệ thống cơ sở dữ liệu quan hệ miễn phí, mã nguồn mở và là một trong những hệ thống cơ sở dữ liệu quan hệ phổ biến nhất trên toàn cầu. Nó là một sự thay thế thả vào cho hệ thống cơ sở dữ liệu MySQL. Tuy nhiên, cấu trúc và chỉ mục của cả hai hệ thống cơ sở dữ liệu đều giống nhau, điều này sẽ cho phép bạn chuyển cơ sở dữ liệu của mình từ MySQL sang MariaDB mà không cần phải thay đổi các ứng dụng của mình.

Theo mặc định, MariaDB được cấu hình để chỉ nghe trên máy chủ cục bộ. Vì vậy, nó chỉ có thể được truy cập từ những người dùng cục bộ hoạt động trên cùng một máy chủ với cơ sở dữ liệu. Trong kiến ​​trúc ứng dụng web hiện đại, hầu hết các chương trình phụ trợ cơ sở dữ liệu được lưu trữ trên máy chủ chuyên dụng của riêng chúng. Một trong những cách dễ nhất để đạt được điều này là cấu hình cơ sở dữ liệu để cho phép các kết nối từ xa.

Một trường hợp sử dụng khác là nếu bạn muốn sử dụng phần mềm quản lý từ xa với cơ sở dữ liệu của mình như MySQL Workbench, Navicat, HeidiSQL, DBeaver, Sequel Pro hoặc tương tự.

Trong hướng dẫn này, mình sẽ chỉ cho bạn cách cấu hình MariaDB cho các kết nối từ xa bằng cách sử dụng bảng điều khiển Webdock hoặc theo cách thủ công với quyền truy cập shell trên máy chủ Ubuntu 18.04.

Chúng ta sẽ cài sẵn các dịch vụ cần thiết để thực hiện bài hướng dẫn này.

  • Phiên bản Ubuntu có cài đặt LEMP / LAMP.
  • Bạn có quyền truy cập shell (SSH) vào VPS của mình.
  • Mật khẩu root được thiết lập trên VPS của bạn.

1. Kiểm tra máy chủ MariaDB có đang hoạt động không.

Trước khi bắt đầu, hãy đảm bảo máy chủ MariaDB đang chạy bằng cách sử dụng lệnh sau:

Mã nguồn [Chọn]
$ ps -ef | grep -i mysql
Bạn sẽ nhận được kết quả sau:

Mã nguồn [Chọn]
mysql        595       1  0 04:17 ?        00:00:00 /usr/sbin/mysqld
root        1350    1337  0 04:22 pts/0    00:00:00 grep --color=auto -i mysql


Theo mặc định, máy chủ MariaDB chỉ nghe trên máy chủ cục bộ vì lý do bảo mật. Bạn có thể kiểm tra nó bằng lệnh sau:

Mã nguồn [Chọn]
$ netstat -ant | grep 3306
Trong đầu ra sau, bạn sẽ thấy rằng máy chủ MariaDB đang lắng nghe trên localhost (127.0.0.1):

Mã nguồn [Chọn]
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
2. Cấu hình máy chủ MariaDB.

Theo mặc định, MariaDB chỉ được phép kết nối từ localhost, tất cả các kết nối từ máy chủ từ xa bị từ chối theo mặc định.

Điều đầu tiên bạn cần làm là cấu hình máy chủ MariaDB để lắng nghe tất cả các địa chỉ IP trên hệ thống.

Bạn có thể thực hiện bằng cách chỉnh sửa tập tin cấu hình mặc định MariaDB /etc/mysql/my.cnf. Bạn có thể mở tập tin này bằng trình soạn thảo văn bản yêu thích của mình:

Mã nguồn [Chọn]
$ nano /etc/mysql/my.cnf
Thay đổi giá trị của bind-address từ 127.0.0.1 thành 0.0.0.0. Để máy chủ MariaDB chấp nhận các kết nối trên tất cả các giao diện IPv4 của máy chủ.

Mã nguồn [Chọn]
bind-address = 0.0.0.0
Lưu và đóng tập tin khi bạn hoàn tất. Sau đó, khởi động lại dịch vụ MariaDB để áp dụng các thay đổi:

Mã nguồn [Chọn]
$ systemctl restart mariadb
Bây giờ bạn có thể xác minh trạng thái nghe MariaDB bằng lệnh sau:

Mã nguồn [Chọn]
$ netstat -ant | grep 3306
Nếu mọi thứ đều ổn, bạn sẽ nhận được kết quả sau:

Mã nguồn [Chọn]
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
Bây giờ, máy chủ MariaDB được thiết lập để lắng nghe tất cả các địa chỉ IP.

Lưu ý: Nếu bạn đang chạy MySQL Server thay vì MariaDB, thì tập tin cấu hình chính được đặt tại /etc/mysql/mysql.conf.d/mysqld.cnf. Bạn có thể thay đổi bind-address bằng cách chỉnh sửa tập tin này. Các bước còn lại đều giống nhau.

3. Cấp quyền truy cập cho người dùng từ hệ thống từ xa.

Trong phần này, chúng ta sẽ tạo một cơ sở dữ liệu mới có tên wpdb và người dùng có tên là wpuser, đồng thời cấp quyền truy cập cho hệ thống từ xa để kết nối với một cơ sở dữ liệu wpdb với tư cách là người dùng wpuser.

Đầu tiên, đăng nhập vào MariaDB shell bằng lệnh sau:

Mã nguồn [Chọn]
$ mysql -u admin -p
Cung cấp mật khẩu quản trị (root) của bạn như được hiển thị trong phần phụ trợ và khi bạn nhận được lời nhắc, hãy tạo cơ sở dữ liệu và người dùng bằng lệnh sau:

Mã nguồn [Chọn]
MariaDB > CREATE DATABASE wpdb;
MariaDB > CREATE USER  'wpuser'@'localhost' IDENTIFIED BY 'password';

Tiếp theo, bạn sẽ cần cấp quyền cho hệ thống từ xa có địa chỉ IP 208.117.84.50 để kết nối với cơ sở dữ liệu có tên wpdb với tư cách là user wpuser. Bạn có thể làm điều đó bằng lệnh sau:

Mã nguồn [Chọn]
MariaDB > GRANT ALL ON wpdb.* to 'wpuser'@'208.117.84.50' IDENTIFIED BY 'password' WITH GRANT OPTION;
Tiếp theo, xóa các quyền và thoát khỏi trình bao MariaDB bằng lệnh sau:

Mã nguồn [Chọn]
MariaDB > FLUSH PRIVILEGES;
MariaDB > EXIT;

Dưới đây là giải thích ngắn gọn về từng tham số:

  • wpdb: Đây là tên của cơ sở dữ liệu MariaDB mà người dùng muốn kết nối.
  • wpuser: Đây là tên của người dùng cơ sở dữ liệu MariaDB.
  • 208.117.84.50: Đây là địa chỉ IP của hệ thống từ xa mà người dùng muốn kết nối.
  • mật khẩu: Là mật khẩu của người dùng cơ sở dữ liệu.

Nếu bạn muốn cấp quyền truy cập từ xa trên tất cả cơ sở dữ liệu cho wpuser, hãy chạy lệnh sau:

Mã nguồn [Chọn]
MariaDB > GRANT ALL ON *.* to 'wpuser'@'208.117.84.50' IDENTIFIED BY 'password' WITH GRANT OPTION;
Nếu bạn muốn cấp quyền truy cập vào tất cả địa chỉ IP từ xa trên wpdb dưới dạng wpuser, hãy sử dụng % thay vì địa chỉ IP (208.117.84.50) như được hiển thị bên dưới:

Mã nguồn [Chọn]
MariaDB > GRANT ALL ON wpdb.* to 'wpuser'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Nếu bạn muốn cấp quyền truy cập vào tất cả các địa chỉ IP trong mạng con 208.117.84.0/24 trên wpdb dưới dạng wpuser, hãy chạy lệnh sau:

Mã nguồn [Chọn]
MariaDB > GRANT ALL ON wpdb.* to 'wpuser'@'208.117.84.%' IDENTIFIED BY 'password' WITH GRANT OPTION;
4. Cấu hình tường lửa.

Nếu máy chủ MariaDB của bạn được cấu hình với tường lửa UFW (theo mặc định trên tất cả các máy chủ) thì bạn sẽ cần cho phép lưu lượng truy cập trên cổng 3306 từ hệ thống từ xa.

Bạn có thể cấp quyền truy cập vào hệ thống từ xa với IP 208.117.84.50 để kết nối cổng 3306 bằng lệnh sau:

Mã nguồn [Chọn]
$ ufw allow from 208.117.84.50 to any port 3306
Nếu bạn muốn cấp quyền truy cập từ bất kỳ địa chỉ IP nào, bạn sẽ sử dụng lệnh sau:

Mã nguồn [Chọn]
$ ufw allow 3306
Tiếp theo, tải lại tường lửa bằng lệnh sau:

Mã nguồn [Chọn]
$ ufw reload
Sau khi hoàn tất, bạn có thể chuyển sang bước tiếp theo.

5. Kiểm tra kết nối từ hệ thống từ xa.

Tại thời điểm này, máy chủ MariaDB được cấu hình để cho phép kết nối từ hệ thống từ xa với địa chỉ IP 208.117.84.50. Bây giờ, đã đến lúc kiểm tra kết nối từ hệ thống máy khách đến máy chủ MariaDB.

Dưới đây mình chỉ ra cách thực hiện điều này trên dòng lệnh trong Linux, nhưng bạn cũng có thể kiểm tra điều này từ máy tính để bàn của mình (nếu không phải trên Linux) bằng cách sử dụng bất kỳ trình quản lý từ xa MySQL nào, chẳng hạn như các trình quản lý được liệt kê trong phần giới thiệu của bài viết này.

Trước tiên, bạn sẽ cần cài đặt gói MariaDB Client trong hệ thống từ xa. Bạn có thể cài đặt nó bằng lệnh sau:

Mã nguồn [Chọn]
$ apt-get install mariadb-client -y
Sau khi cài đặt xong, hãy kết nối với máy chủ MariaDB bằng cách chạy lệnh sau trên hệ thống từ xa:

Mã nguồn [Chọn]
$ mysql -u wpuser -h 45.148.28.101 -p
Bạn sẽ được yêu cầu cung cấp mật khẩu của wpuser như hình dưới đây:

Mã nguồn [Chọn]
$ Enter password:
Khi kết nối đã được thiết lập, bạn sẽ nhận được đầu ra sau:

Mã nguồn [Chọn]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.4.10-MariaDB-1:10.4.10+maria~bionic-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


Bây giờ bạn có thể liệt kê các cơ sở dữ liệu bằng lệnh sau:

Mã nguồn [Chọn]
$ MariaDB > show databases;
Bạn sẽ nhận được kết quả sau:

Mã nguồn [Chọn]
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wpdb               |
+--------------------+
2 rows in set (0.10 sec)

Trong hướng dẫn trên, chúng ta đã học cách cấu hình MariaDB cho các kết nối từ xa. Mình cũng đã học cách cấp quyền truy cập trên một cơ sở dữ liệu cụ thể hoặc tất cả các cơ sở dữ liệu cho địa chỉ IP cụ thể hoặc tất cả các địa chỉ IP.

Mình hy vọng hướng dẫn này sẽ giúp bạn hiểu cách kết nối ứng dụng web của mình với cơ sở dữ liệu được lưu trữ trên máy chủ từ xa và cách bảo mật nó đúng cách với các giới hạn IP.