Truy vấn user và host
Bảng hệ thống mysql.user lưu thông tin tài khoản. Cột user là tên đăng nhập, cột host là máy chủ được phép kết nối.
Cú pháp
Chỉ lấy tên user
mysql> SELECT user FROM mysql.user;
+------------------+ | user | +------------------+ | Manish | | mysql.infoschema | | mysql.session | | mysql.sys | | root | | am | +------------------+ 6 rows in set (0.06 sec)
Lấy user kèm host
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+ | user | host | +------------------+-----------+ | Manish | % | | mysql.infoschema | % | | mysql.session | % | | mysql.sys | % | | root | % | | am | localhost | +------------------+-----------+ 6 rows in set (0.00 sec)
Ý nghĩa cột Host
| Giá trị Host | Ý nghĩa | Ví dụ |
|---|---|---|
| localhost | Chỉ kết nối từ máy chủ cục bộ (socket) | 'user'@'localhost' |
| 127.0.0.1 | Chỉ kết nối qua TCP/IP local | 'user'@'127.0.0.1' |
| % | Kết nối từ bất kỳ host nào (wildcard) | 'user'@'%' |
| 192.168.1.% | Kết nối từ dải IP cụ thể | 'user'@'192.168.1.%' |
| ten-mien.com | Kết nối từ domain cụ thể | 'user'@'ten-mien.com' |
Truy vấn nâng cao
Phân loại user theo loại host
SELECT
user,
host,
CASE
WHEN host = 'localhost' THEN 'Local Socket'
WHEN host = '127.0.0.1' THEN 'Local TCP'
WHEN host = '%' THEN 'Remote (Any Host)'
ELSE 'Specific Host/IP'
END AS connection_type
FROM mysql.user
ORDER BY connection_type, user;
Tìm user trùng tên khác host
SELECT user, GROUP_CONCAT(host) AS hosts FROM mysql.user GROUP BY user HAVING COUNT(*) > 1;
Lưu ý bảo mật
- User với host
%rủi ro cao hơn - chỉ dùng khi cần thiết - Tách biệt user ứng dụng (localhost) và user admin (IP cụ thể)
- Xóa user không sử dụng:
DROP USER 'ten'@'host'; - MySQL 8.0: Cần quyền
SELECTtrênmysql.userhoặc quyềnCREATE USER