Giới thiệu
Trước khi tạo database, nên kiểm tra xem tài khoản hiện tại (hoặc tài khoản khác) có quyền CREATE DATABASE hay không bằng lệnh SHOW GRANTS.
Cú pháp
SHOW GRANTS FOR 'username'@'host';
Hoặc cho người dùng hiện tại:
SHOW GRANTS FOR CURRENT_USER;
Ví dụ thực hành
Case 1: Kiểm tra quyền của root (current_user)
mysql> SHOW GRANTS FOR CURRENT_USER;
Kết quả hiển thị đầy đủ quyền: CREATE, DROP, ALTER, CREATE DATABASE (được nhúng trong CREATE ở cấp global), SUPER, v.v. Root có toàn quyền.
Case 2: Kiểm tra quyền của user 'Bob'
mysql> SHOW GRANTS FOR 'Bob'@'%';
Kết quả tương tự root (trong ví dụ Bob cũng được cấp toàn quyền).
Phân tích quyền cần thiết
- Để
CREATE DATABASE: cần quyềnCREATEở cấp global (*.*) hoặc cấp database cụ thể. - Kiểm tra trong output: tìm
CREATEtrong danh sách privileges. - Quyền
CREATE DATABASEkhông tách biệt; nó là một phần của privilegeCREATE.
Các lệnh hữu ích khác
-- Xem quyền của user hiện tại (rút gọn)
SHOW GRANTS;
-- Xem tất cả user và host
SELECT User, Host FROM mysql.user;
-- Cấp quyền CREATE DATABASE cho user
GRANT CREATE ON *.* TO 'dev'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Lưu ý
- MySQL 8.0: dùng
CREATE USER+GRANTriêng biệt (không cònIDENTIFIED BYtrong GRANT). - Quyền cấp ở cấp global (*.*) áp dụng cho tất cả database.
- Sau khi GRANT, chạy
FLUSH PRIVILEGES(MySQL < 8.0) hoặc không cần (8.0+ tự động).