Quy trình 2 bước
Bước 1: Tạo user
CREATE USER 'ten_user'@'localhost' IDENTIFIED BY 'mat_khau';
Bước 2: Cấp toàn bộ quyền trên database
GRANT ALL PRIVILEGES ON ten_database.* TO 'ten_user'@'localhost';
Ví dụ thực tế
Tạo user "Adam Smith"
mysql> CREATE USER 'Adam Smith'@'localhost' IDENTIFIED BY 'Adam123456'; Query OK, 0 rows affected (0.29 sec)
Cấp quyền trên database "test"
mysql> GRANT ALL PRIVILEGES ON test.* TO 'Adam Smith'@'localhost'; Query OK, 0 rows affected (0.19 sec)
Giải thích quyền
ALL PRIVILEGES bao gồm:
- Dữ liệu: SELECT, INSERT, UPDATE, DELETE
- Cấu trúc: CREATE, ALTER, DROP, INDEX
- Khác: CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER
Các cấp độ cấp quyền
| Cấp độ | Cú pháp | Phạm vi |
|---|---|---|
| Global | GRANT ALL ON *.* TO 'user'@'host' | Tất cả database |
| Database | GRANT ALL ON db.* TO 'user'@'host' | 1 database cụ thể |
| Table | GRANT ALL ON db.table TO 'user'@'host' | 1 bảng cụ thể |
| Column | GRANT SELECT(col) ON db.table TO 'user'@'host' | 1 cột cụ thể |
Kiểm tra quyền đã cấp
mysql> SHOW GRANTS FOR 'Adam Smith'@'localhost';
Thu hồi quyền
REVOKE ALL PRIVILEGES ON ten_database.* FROM 'ten_user'@'localhost';
Lưu ý quan trọng
- MySQL 8.0: Không cần
FLUSH PRIVILEGES(tự động) - MySQL < 8.0: Cần chạy
FLUSH PRIVILEGES;sau GRANT/REVOKE - User 'user'@'localhost' ≠ 'user'@'%' (host khác = user khác)
- Nguyên tắc least privilege: Chỉ cấp quyền cần thiết
- Tránh dùng root cho ứng dụng
Ví dụ cấp quyền chỉ đọc (Read-only)
CREATE USER 'readonly'@'%' IDENTIFIED BY 'strong_password'; GRANT SELECT ON ten_database.* TO 'readonly'@'%';