- 1 Giới thiệu
- 2 Tạo người dùng trong MariaDB
- 3 Quản lý quyền trong MariaDB
- 4 Xóa người dùng trong MariaDB
- 5 Các Lỗi Thường Gặp và Giải Pháp (FAQ)
- 6 Kết luận
Giới thiệu
1.1 Bạn có muốn học cách tạo người dùng trong MariaDB không?
Bạn đã bao giờ muốn tạo một người dùng mới trong MariaDB và cấu hình các quyền thích hợp chưa?
Ví dụ, bạn có thể đã gặp các tình huống sau:
- Bạn đã thực thi
CREATE USERnhưng không thể đăng nhập - Bạn đã cấp quyền bằng
GRANT, nhưng chúng không được áp dụng - Bạn không chắc cách cấu hình quyền đúng trong môi trường sản xuất
- Bạn muốn xóa an toàn các người dùng không cần thiết
Nếu bạn đang gặp những vấn đề này, bài viết sẽ giúp bạn hiểu đầy đủ toàn bộ quy trình từ tạo người dùng đến quản lý quyền và xóa người dùng trong MariaDB.
1.2 Những gì bạn sẽ học trong bài viết này
Bài viết cung cấp giải thích chi tiết về các khía cạnh sau của quản lý người dùng MariaDB:
- Cách tạo và xóa người dùng trong MariaDB
- Cách cấp và quản lý quyền (các thực hành tốt nhất cho việc thiết lập quyền hợp lý)
- Các lỗi thường gặp và cách khắc phục
- Các thực hành vận hành tốt nhất cho môi trường phát triển và sản xuất
Tất cả các chủ đề được giải thích bằng các ví dụ SQL thân thiện với người mới, cho phép bạn học và thực hành đồng thời.
1.3 Đối tượng hướng tới
Bài viết này dành cho:
- Người mới bắt đầu: Những người đang học quản lý người dùng MariaDB lần đầu
- Kỹ sư: Những người muốn cấu hình quyền đúng trong môi trường phát triển
- Quản trị viên Cơ sở dữ liệu: Những người muốn tăng cường bảo mật trong môi trường sản xuất
Ngay cả khi bạn mới làm quen với MariaDB, hướng dẫn này cung cấp thông tin thực tiễn để bạn tự tin áp dụng trong các hoạt động thực tế.
Tạo người dùng trong MariaDB
2.1 Lệnh tạo người dùng cơ bản
Trong MariaDB, bạn tạo một người dùng mới bằng lệnh CREATE USER.
Bạn có thể chỉ định tên người dùng và mật khẩu bằng cú pháp sau:
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
Ví dụ, để tạo một người dùng có tên yamada trên localhost với mật khẩu password123:
CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';
Sau khi thực thi lệnh này, người dùng yamada sẽ được tạo và chỉ được phép đăng nhập từ localhost (đăng nhập chỉ được cho phép trên máy chủ).
2.2 Các ví dụ tạo người dùng theo trường hợp sử dụng
Khi tạo người dùng trong MariaDB, bạn có thể chỉ định nơi cho phép kết nối bằng trường hostname.
Việc cấu hình phù hợp dựa trên trường hợp sử dụng là rất quan trọng.
| Case | Command Example | Description |
|---|---|---|
| Local Environment (Development) | CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password'; | User dedicated to development environment |
| Allow Remote Connections | CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password'; | Allow connections from any host (security caution required) |
| Allow Connection from Specific IP | CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password'; | Restrict access to a specific IP address only |
| Allow Connection from Specific Subnet | CREATE USER 'network_user'@'192.168.1.%' IDENTIFIED BY 'password'; | Allow only machines with IP addresses in the 192.168.1.x range |
Sử dụng '%' cho phép kết nối từ mọi máy chủ, nhưng
điều này gây rủi ro bảo mật nghiêm trọng và không được khuyến nghị cho môi trường sản xuất.
Trong sản xuất, tốt nhất là chỉ định địa chỉ IP hoặc cấu hình truy cập qua VPN.
2.3 Lưu ý quan trọng khi tạo người dùng
Có một số điểm cần lưu ý khi tạo người dùng.
(1) Kiểm tra người dùng đã tồn tại
Trước khi tạo người dùng, cần xác nhận rằng người dùng cùng tên chưa tồn tại.
Bạn có thể liệt kê các người dùng hiện đang đăng ký bằng lệnh sau:
SELECT user, host FROM mysql.user;
Kết quả mẫu:
+---------+-----------+
| user | host |
+---------+-----------+
| root | localhost |
| yamada | localhost |
+---------+-----------+
Nếu đã có người dùng với cùng username@hostname, việc thực thi CREATE USER sẽ gây lỗi.
(2) Xử lý khi người dùng đã tồn tại
Trong MariaDB, bạn không thể ghi đè một người dùng đã tồn tại bằng cách tạo lại.
Nếu người dùng đã tồn tại, hãy sử dụng một trong các cách sau:
- Thay đổi mật khẩu của người dùng hiện có
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
- Xóa người dùng không cần thiết và tạo người dùng mới
DROP USER 'yamada'@'localhost'; CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';
Quản lý quyền trong MariaDB
3.1 Cấp quyền
Cú pháp cơ bản
Trong MariaDB, bạn có thể cấp quyền cho người dùng bằng lệnh GRANT.
GRANT privilege ON database_name.table_name TO 'username'@'hostname';
Ví dụ, để cấp tất cả quyền trên test_db cho người dùng yamada:
GRANT ALL PRIVILEGES ON test_db.* TO 'yamada'@'localhost';
Ý nghĩa của lệnh này:
ALL PRIVILEGES: Cấp tất cả quyềntest_db.*: Áp dụng cho tất cả các bảng trong cơ sở dữ liệutest_db'yamada'@'localhost': Áp dụng cho người dùngyamadađăng nhập từ localhost
3.2 Các quyền thường được sử dụng
Trong MariaDB, bạn có thể cấp các quyền như sau:
| Privilege | Description |
|---|---|
ALL PRIVILEGES | Grant all privileges |
SELECT | Read data |
INSERT | Insert data |
UPDATE | Update data |
DELETE | Delete data |
CREATE | Create new tables or databases |
DROP | Drop databases or tables |
GRANT OPTION | Grant privileges to other users |
ALTER | Modify table structure |
EXECUTE | Execute stored procedures or functions |
RELOAD | Reload server settings |
Nếu bạn chỉ muốn cho phép các thao tác cụ thể, nên cấp quyền riêng lẻ thay vì cấp tất cả.
3.3 Cài đặt quyền theo trường hợp sử dụng
Việc gán quyền phù hợp cho mỗi tình huống là rất quan trọng.
| Situation | Recommended Privileges | Command Example |
|---|---|---|
| WordPress Operator | SELECT, INSERT, UPDATE, DELETE | GRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost'; |
| Developer (Development Environment) | ALL PRIVILEGES | GRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%'; |
| Read-Only User | SELECT only | GRANT SELECT ON analytics_db.* TO 'readonly'@'localhost'; |
| Database Administrator (Production Environment) | ALL PRIVILEGES (restricted) | GRANT ALL PRIVILEGES ON production_db.* TO 'admin'@'localhost'; |
Trong môi trường sản xuất, tránh cấp ALL PRIVILEGES một cách dễ dàng.
3.4 Kiểm tra các quyền đã cấp
Để kiểm tra các quyền đã cấp, sử dụng lệnh SHOW GRANTS.
SHOW GRANTS FOR 'username'@'hostname';
Ví dụ, để kiểm tra quyền của người dùng yamada:
SHOW GRANTS FOR 'yamada'@'localhost';
Kết quả mẫu:
+-----------------------------------------------------------------------------------+
| Grants for yamada@localhost |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'yamada'@'localhost' |
+-----------------------------------------------------------------------------------+
Điều này hiển thị các quyền hiện đang được cấp cho người dùng.
3.5 Thu hồi quyền (Xóa quyền)
Để thu hồi các quyền cụ thể từ người dùng, sử dụng lệnh REVOKE.
Cú pháp cơ bản
REVOKE privilege ON database_name.table_name FROM 'username'@'hostname';
Ví dụ, để thu hồi quyền UPDATE từ người dùng yamada:
REVOKE UPDATE ON test_db.* FROM 'yamada'@'localhost';
Thu hồi tất cả quyền
REVOKE ALL PRIVILEGES ON *.* FROM 'yamada'@'localhost';
3.6 Cách xử lý khi thay đổi quyền không có hiệu lực
Trong MariaDB, các thay đổi quyền có thể không được áp dụng ngay lập tức. Nếu xảy ra, hãy chạy lệnh sau:
FLUSH PRIVILEGES;
Chạy lệnh này buộc MariaDB tải lại các bảng quyền để các thay đổi của bạn có hiệu lực ngay lập tức. 
Xóa người dùng trong MariaDB
4.1 Xóa một người dùng
Để xóa một người dùng MariaDB, sử dụng lệnh DROP USER.
Cú pháp cơ bản
DROP USER 'username'@'hostname';
Ví dụ, để xóa người dùng yamada khỏi localhost:
DROP USER 'yamada'@'localhost';
Sau khi thực thi lệnh này, người dùng yamada sẽ được xóa hoàn toàn khỏi hệ thống MariaDB.
4.2 Những điều cần kiểm tra trước khi xóa người dùng
Trước khi xóa người dùng, có một số kiểm tra quan trọng bạn nên thực hiện.
Hãy cẩn thận để không xóa nhầm người dùng cần thiết.
(1) Kiểm tra xem người dùng mục tiêu có tồn tại không
Trong MariaDB, cố gắng xóa một người dùng không tồn tại sẽ gây lỗi.
Chạy lệnh sau để xác nhận người dùng mục tiêu tồn tại:
SELECT user, host FROM mysql.user;
Kết quả mẫu:
+---------+-----------+
| user | host |
+---------+-----------+
| root | localhost |
| yamada | localhost |
| admin | 192.168.1.100 |
+---------+-----------+
Nếu người dùng yamada xuất hiện trong danh sách này, người dùng có thể được xóa.
(2) Kiểm tra xem người dùng có đang kết nối không
Trong MariaDB, nếu người dùng bạn đang xóa hiện đang có một phiên hoạt động,
việc xóa có thể không có hiệu lực ngay lập tức cho phiên đó.
Kiểm tra xem người dùng có đang hoạt động bằng lệnh sau:
SELECT user, host FROM information_schema.processlist;
Kết quả mẫu:
+---------+-----------+
| user | host |
+---------+-----------+
| yamada | localhost |
| root | localhost |
+---------+-----------+
Trong ví dụ này, người dùng yamada hiện đang hoạt động, vì vậy bạn nên kết thúc phiên trước khi xóa.
(3) Buộc Kết Thúc Phiên
Bạn có thể buộc kết thúc một phiên cụ thể bằng cách sử dụng lệnh KILL.
- Đầu tiên, kiểm tra ID tiến trình (cột
ID):SELECT id, user, host FROM information_schema.processlist;
Ví dụ đầu ra:
+----+---------+-----------+
| id | user | host |
+----+---------+-----------+
| 10 | yamada | localhost |
| 11 | root | localhost |
+----+---------+-----------+
- Nếu
yamadacó ID tiến trình là10, hãy kết thúc nó bằng:KILL 10;
4.3 Dọn Dẹp Sau Khi Xóa
Sau khi xóa một người dùng, thông tin đặc quyền còn lại có thể vẫn tồn tại trong cơ sở dữ liệu. Trong những trường hợp như vậy, chạy FLUSH PRIVILEGES để làm mới các bảng đặc quyền.
FLUSH PRIVILEGES;
Thực hiện lệnh này đảm bảo rằng thông tin của người dùng đã xóa được loại bỏ hoàn toàn khỏi hệ thống cơ sở dữ liệu.
4.4 Lưu Ý Quan Trọng Khi Xóa Người Dùng
Hãy nhớ các điểm sau khi xóa người dùng:
- Người dùng đã xóa không thể khôi phục
- Khi bạn thực thi
DROP USER, người dùng đã xóa không thể khôi phục. - Nếu bị xóa nhầm, bạn phải tạo lại người dùng bằng
CREATE USER.
- Có Thể Cần Chuyển Đặc Quyền
- Nếu người dùng đã xóa chịu trách nhiệm cho các hoạt động quan trọng của cơ sở dữ liệu, bạn phải chuyển các đặc quyền cần thiết cho một người dùng phù hợp khác trước.
- Cẩn Thận trong Môi Trường Sản Xuất
- Trong môi trường sản xuất, việc xóa đột ngột có thể gây thời gian ngừng hoạt động hoặc lỗi hệ thống.
- Bạn nên phân tích tác động trước và tạo bản sao lưu.
Các Lỗi Thường Gặp và Giải Pháp (FAQ)
Khi quản lý người dùng trong MariaDB, bạn có thể gặp phải nhiều lỗi. Phần này giải thích các lỗi phổ biến nhất, nguyên nhân và cách khắc phục.
5.1 FAQ Dành Cho Người Mới Bắt Đầu
Câu Hỏi 1: Sự khác biệt giữa quản lý người dùng MariaDB và MySQL là gì?
MariaDB và MySQL thường sử dụng cùng một cú pháp, nhưng có một số khác biệt về tính năng.
| Comparison Item | MySQL | MariaDB |
|---|---|---|
CREATE USER | Supported | Supported |
SHOW GRANTS FOR | Supported | Supported |
DROP USER | Supported | Supported |
CREATE ROLE | MySQL 8.0 and later | MariaDB 10.0 and later |
MariaDB hỗ trợ CREATE ROLE, cho phép quản lý người dùng dựa trên vai trò.
Câu Hỏi 2: Sự khác biệt giữa localhost và % là gì?
Trong quản lý người dùng MariaDB, việc chỉ định tên máy chủ là rất quan trọng.
localhost: Cho phép kết nối chỉ từ máy cục bộ%: Cho phép kết nối từ bất kỳ máy nào (rủi ro bảo mật)192.168.1.100: Cho phép kết nối chỉ từ địa chỉ IP cụ thể192.168.1.%: Cho phép kết nối chỉ từ mạng con cụ thể (192.168.1.*)
5.2 Khắc Phục Sự Cố
Câu Hỏi 3: Cách Khắc Phục “ERROR 1396 (HY000): Operation CREATE USER failed”
Nguyên nhân: Người dùng đã chỉ định đã tồn tại, vì vậy không thể tạo người dùng mới.
Giải pháp: Kiểm tra xem người dùng có tồn tại không và xóa hoặc sửa đổi nếu cần.
- Kiểm tra người dùng hiện có
SELECT user, host FROM mysql.user WHERE user='yamada';
- Xóa nếu không cần thiết
DROP USER 'yamada'@'localhost';
- Thay đổi mật khẩu thay vì
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
Câu Hỏi 4: Các đặc quyền được cấp bằng GRANT không được áp dụng
Nguyên nhân: Bộ nhớ đệm đặc quyền của MariaDB chưa được làm mới.
Giải pháp: Thực thi FLUSH PRIVILEGES để tải lại các đặc quyền.
FLUSH PRIVILEGES;
Câu Hỏi 5: Không Thể Kết Nối Từ Xa Ngay Cả Khi Sử Dụng %
Nguyên nhân: Kết nối từ xa có thể bị hạn chế trong tệp cấu hình MariaDB.
Giải pháp:
- Chỉnh sửa tệp cấu hình
/etc/mysql/my.cnf(hoặc/etc/mysql/mariadb.conf.d/50-server.cnf) và thay đổi giá trị củabind-addressthành0.0.0.0.bind-address = 0.0.0.0
- Khởi động lại MariaDB
sudo systemctl restart mariadb
- Sử dụng
%trong lệnhGRANTđể cho phép kết nốiGRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
Q6: Gặp lỗi “Access denied for user ‘user’@’host’” Error
Nguyên nhân: Người dùng không có quyền thích hợp, hoặc mật khẩu không đúng.
Giải pháp:
- Kiểm tra quyền hiện tại
SHOW GRANTS FOR 'user'@'host';
- Cấp quyền thích hợp
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
- Xác minh bạn đang đăng nhập bằng mật khẩu đúng
mysql -u user -p
Kết luận
Quản lý người dùng MariaDB là cần thiết để cải thiện bảo mật cơ sở dữ liệu và hiệu suất hoạt động.
Trong bài viết này, chúng tôi đã trình bày chi tiết việc tạo người dùng, quản lý quyền, xóa người dùng và các lỗi thường gặp cùng giải pháp.
6.1 Tóm tắt
① Tạo người dùng trong MariaDB
- Tạo người dùng mới bằng lệnh
CREATE USER - Hạn chế truy cập bằng
@'hostname' - Luôn kiểm tra người dùng hiện có trước khi tạo mới
② Quản lý quyền trong MariaDB
- Sử dụng
GRANTđể cấp các quyền tối thiểu cần thiết - Sử dụng
SHOW GRANTSđể xác minh các quyền hiện tại - Sử dụng
REVOKEđể xóa các quyền không cần thiết - Áp dụng thay đổi bằng
FLUSH PRIVILEGES
③ Xóa người dùng trong MariaDB
- Xóa người dùng bằng lệnh
DROP USER - Kiểm tra phiên hoạt động trước khi xóa
- Xóa bộ nhớ đệm quyền bằng
FLUSH PRIVILEGES
④ Các lỗi thường gặp và giải pháp
ERROR 1396 (HY000)→ Kiểm tra người dùng hiện có và xóa nếu cần- Thay đổi quyền không được áp dụng → Chạy
FLUSH PRIVILEGES Access denied for user→ Xác minh quyền và mật khẩu- Không thể kết nối từ xa với
%→ Điều chỉnh cấu hìnhbind-address
6.2 Các thực hành tốt nhất cho quản lý người dùng MariaDB
- Cấp chỉ các quyền tối thiểu cần thiết
- Tránh cấp
ALL PRIVILEGESmột cách tùy tiện - Hạn chế người dùng trong môi trường production chỉ có
SELECT, INSERT, UPDATE, DELETEkhi có thể - Luôn xác minh các thay đổi quyền
- Sử dụng
SHOW GRANTSđể xác nhận cấu hình đúng - Phân tích tác động trước khi xóa người dùng
- Cẩn thận trong môi trường production và tạo sao lưu
- Thực thi các biện pháp bảo mật mạnh
- Áp dụng hạn chế IP cho kết nối từ xa
- Đặt mật khẩu mạnh cho người dùng root
- Thường xuyên loại bỏ người dùng và quyền không cần thiết
6.3 Kết luận cuối cùng
Qua hướng dẫn này, bạn đã học được tất cả từ cơ bản đến các kỹ thuật nâng cao trong quản lý người dùng MariaDB.
Hãy sử dụng kiến thức này để đạt được quản trị cơ sở dữ liệu an toàn và hiệu quả.
Chúng tôi sẽ tiếp tục chia sẻ những thông tin hữu ích về MariaDB, hãy theo dõi nhé! 🚀


