

DCL Trong MySQL – Quản Lý Quyền Truy Cập Với GRANT và REVOKE
- 08-07-2025
- Toanngo92
- 0 Comments
DCL – Data Control Language trong MySQL, một nhóm lệnh dùng để quản lý quyền truy cập và bảo mật trong hệ quản trị cơ sở dữ liệu. Đây là phần cực kỳ quan trọng khi bạn muốn triển khai hệ thống thật, nhiều người dùng với vai trò và quyền hạn khác nhau.
Mục lục
✅ 1. DCL là gì?
- DCL (Data Control Language) là nhóm lệnh dùng để quản lý quyền truy cập (permissions) cho người dùng trong cơ sở dữ liệu.
- Bao gồm 2 lệnh chính:
GRANT
: cấp quyềnREVOKE
: thu hồi quyền
✅ 2. Quản lý người dùng trong MySQL
Trước khi gán quyền, bạn cần tạo (hoặc đã có) người dùng.
➕ Tạo người dùng:
CREATE USER 'toan'@'localhost' IDENTIFIED BY 'matkhau123';
'toan'@'localhost'
nghĩa là người dùng chỉ được đăng nhập từlocalhost
.
👁️ Xem tất cả người dùng:
SELECT user, host FROM mysql.user;
✅ 3. Lệnh GRANT
– Cấp quyền
Cú pháp:
GRANT danh_sach_quyen
ON ten_csdl.ten_bang
TO 'ten_user'@'host';
📌 Ví dụ: cấp quyền SELECT
, INSERT
trên bảng Students
GRANT SELECT, INSERT
ON mydb.Students
TO 'toan'@'localhost';
📌 Cấp tất cả quyền trên một database:
GRANT ALL PRIVILEGES
ON mydb.*
TO 'toan'@'localhost';
🗝️ Cấp quyền quản trị toàn hệ thống (cẩn trọng!):
GRANT ALL PRIVILEGES
ON *.*
TO 'admin'@'%'
WITH GRANT OPTION;
WITH GRANT OPTION
cho phép user này cấp quyền cho người khác.
✅ 4. Lệnh REVOKE
– Thu hồi quyền
Cú pháp:
REVOKE danh_sach_quyen
ON ten_csdl.ten_bang
FROM 'ten_user'@'host';
📌 Ví dụ:
REVOKE INSERT
ON mydb.Students
FROM 'toan'@'localhost';
✅ 5. Áp dụng thay đổi bằng FLUSH
Sau khi cấp/thay đổi quyền, bạn nên chạy:
FLUSH PRIVILEGES;
Đảm bảo MySQL tải lại quyền mới từ hệ thống.
✅ 6. Kiểm tra quyền của user
📋 Đang đăng nhập bằng user đó:
SHOW GRANTS;
📋 Xem quyền của user khác:
SHOW GRANTS FOR 'toan'@'localhost';
✅ 7. Xóa người dùng
DROP USER 'toan'@'localhost';
✅ 8. Các quyền phổ biến trong MySQL
Quyền | Mô tả |
---|---|
SELECT | Cho phép đọc dữ liệu |
INSERT | Thêm dữ liệu |
UPDATE | Sửa dữ liệu |
DELETE | Xóa dữ liệu |
CREATE | Tạo bảng, CSDL… |
DROP | Xóa bảng, CSDL… |
ALTER | Sửa cấu trúc bảng |
INDEX | Tạo/sửa chỉ mục |
EXECUTE | Gọi Stored Procedure , Function |
GRANT OPTION | Cho phép cấp quyền cho user khác |
ALL PRIVILEGES | Tất cả các quyền trên đối tượng được chỉ định |
✅ 9. Lưu ý bảo mật
Mục | Gợi ý |
---|---|
🔐 Không dùng root cho mọi tác vụ | Tạo user riêng cho từng chức năng |
✅ Dùng GRANT chính xác, tối thiểu | Chỉ cấp quyền cần thiết |
❌ Tránh dùng ALL PRIVILEGES quá mức | Đặc biệt trên *.* trừ khi là admin |
✅ Kiểm soát WITH GRANT OPTION | Tránh để người dùng tự cấp quyền bừa bãi |
📘 Kết Luận
- DCL giúp bạn kiểm soát ai được làm gì với dữ liệu trong MySQL.
- Luôn tạo người dùng riêng biệt, cấp quyền theo nguyên tắc “ít nhất cần thiết” để tăng bảo mật.
- Kết hợp với
VIEW
,FUNCTION
,TRIGGER
,PROCEDURE
để xây dựng hệ thống an toàn, chuyên nghiệp.