Hiểu về host '%' và đổi mật khẩu user trong MySQL
Trong bảng mysql.user, cột Host xác định từ đâu user được phép kết nối. % là wildcard cho "bất kỳ host nào" (remote access), localhost chỉ cho phép kết nối local.
Kiểm tra user và host
mysql> SELECT user, host FROM mysql.user;
Kết quả mẫu:
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | Manish | % | | root | % | | John | localhost | | mysql.session | localhost | +------------------+-----------+
Bob@%: Bob kết nối từ bất kỳ IP nàoJohn@localhost: John chỉ kết nối từ chính server MySQL
Đổi mật khẩu user
MySQL 5.7+ (khuyên dùng):
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
Cú pháp cũ (vẫn hoạt động):
SET PASSWORD FOR 'username'@'host' = 'new_password';
Ví dụ: Đổi mật khẩu John@localhost
mysql> SET PASSWORD FOR 'John'@'localhost' = 'John123456'; Query OK, 0 rows affected (0.35 sec) mysql> FLUSH PRIVILEGES;
Lưu ý quan trọng
- Phải khớp chính xác host: 'John'@'localhost' khác 'John'@'%'
- FLUSH PRIVILEGES: Nạp lại quyền sau khi đổi mật khẩu (tự động trong ALTER USER)
- MySQL 8.0: Mặc định dùng
caching_sha2_password, client cũ cầnmysql_native_password - Tạo user mới:
CREATE USER 'user'@'%' IDENTIFIED BY 'pass';
Best Practice bảo mật
- Tránh user@% trừ khi bắt buộc
- Dùng user@'192.168.1.%' cho dải IP cụ thể
- Mật khẩu mạnh, rotation định kỳ
- Tắt tài khoản không dùng:
ALTER USER 'user'@'host' ACCOUNT LOCK;