Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách lấy danh sách host của user MySQL


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ĩaVí dụ
localhostChỉ kết nối từ máy chủ cục bộ (socket)'user'@'localhost'
127.0.0.1Chỉ 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.comKế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 SELECT trên mysql.user hoặc quyền CREATE USER