Trước khi đi đến phần cấu hình chúng ta tìm hiểu một chút về cơ chế kết nối của MariaDB. Mặc định MariaDB gắn với địa chỉ 127.0.0.1 (IP loopback) bằng tùy chọn bind-address trong file cấu hình, điều này giúp hệ thống bảo mật hơn do không thể kết nối trực tiếp đến MariaDB server từ remote host thông qua cổng TCP. Kể cả cùng 1 máy chủ nhưng khác cổng loopback thì cũng không thể nào kết nối được. Một số phiên bản MariaDB cũ còn khóa luôn kết nối TCP/IP bằng tùy chọn skip-networking.
Thêm nữa MariaDB/ MySQL cũng quy định “localhost” (unix socket) khác so với “127.0.0.1” (tcp socket) nên bạn có thể đặt mật khẩu cho TCP mà không thể đặt cho Unix socket
Kiểm tra cấu hình MariaDB bằng câu lệnh
user@server:~$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Bạn sẽ thấy tùy chọn
bind-address = 127.0.0.1
Cấu hình MariaDB nghe kết nối từ remote host
Rất đơn giản bạn chỉ cần chuyển dòng tùy chọn #bind-address = 127.0.0.1 thành comment, ấn Ctrl+O và Ctrl_X để thoát. Khởi động lại máy chủ MariaDB bằng lệnh
user@server:~$ sudo systemctl restart mariadb
Xem lại cấu hình của MariaDB bằng lệnh
user@server:~$ mysqld --print-defaults mysqld would have been started with the following arguments: --user=mysql --pid-file=/run/mysqld/mysqld.pid --socket=/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=10 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1
Cấp quyền cho user kết nối bằng remote host
Đăng nhập vào MariaDB bằng câu lệnh
user@server:~$ sudo mysql -u root
Sử dụng lệnh sau để xem các user và host được phép kết nối
MariaDB [(none)]> SELECT User, Host, Plugin FROM mysql.user; +-------+-------------+-------------+ | User | Host | Plugin | +-------+-------------+-------------+ | jessy | 26.52.152.3 | | | jessy | localhost | | | root | localhost | unix_socket | +-------+-------------+-------------+
Như hình trên ta có thể thấy tài khoản root sử dụng unix_socket có thể đăng nhập trực tiếp từ tài khoản root ubuntu mà không cần mật khẩu
user@server:~$ sudo mysql -u root
Tài khoản jessy được phép kết nối trong localhost và từ địa chỉ 26.52.152.3 bây giờ ta muốn thêm địa chỉ để kết nối đến tài khoản jessy bằng lệnh
MariaDB [(none)]> GRANT ALL PRIVILEGES ON dev_test.* TO 'jessy'@'192.168.0.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
Câu lệnh trên giúp tài khoản jessy sử dụng cơ sở dữ liệu dev_test được phép truy cập từ mạng LAN có địa chỉ 192.168.0.0/24 với mật khẩu là “my-new-password”
Kiểm tra lại ta sẽ thấy:
MariaDB [(none)]> SELECT User, Host, Plugin FROM mysql.user; +-------+-------------+-------------+ | User | Host | Plugin | +-------+-------------+-------------+ | jessy | 192.168.0.% | | | jessy | 61.38.140.3 | | | jessy | localhost | | | root | localhost | unix_socket | +-------+-------------+-------------+
Cấu hình tường lửa để cho phép cổng kết nối MariaDB
Nếu bạn đã kích hoạt tường lửa ufw trên Ubuntu thì cần cấu hình để cho phép cổng 3306 của MariaDB, nếu bạn đã đổi cổng khác thì lưu ý nhập vào cổng tương ứng nhé
user@server:~$ sudo ufw allow 3306/tcp
Bài viết sử dụng Ubuntu 20.04 và MariaDB 10.3. Mong được các bạn đóng góp ý kiến để website ngày càng phát triển.