查询 MySQL 用户有多种方法,主要分为两大类:使用 MySQL 命令行工具和使用图形化界面工具。
我将以最常用和权威的命令行方式为主进行详细说明。
方法一:使用 MySQL 命令行工具(最直接的方法)
首先,你需要使用一个具有足够权限的账户(如 root 用户)登录到 MySQL 服务器。
mysql -u root -p
然后输入密码。
1. 查询所有用户列表(核心方法)
MySQL 将所有用户账户信息存储在默认数据库 mysql 的 user 表中。因此,直接查询该表即可。
SELECT User, Host FROM mysql.user;
解释:
SELECT User, Host:选择显示用户名列和主机名列。FROM mysql.user:从mysql数据库的user表中查询。- 在 MySQL 中,一个用户的完整标识是
'用户名'@'主机名'。主机名指定了该用户可以从哪里连接到数据库(例如,'root'@'localhost'和'root'@'%'是两个不同的用户)。
执行结果示例:
+------------------+-----------+
| User | Host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| myapp_user | % |
| readonly_user | 192.168.1.%|
+------------------+-----------+
2. 获取更详细的用户信息
你可以从 mysql.user 表中选择更多的列来获取用户的详细权限和设置。
SELECT User, Host, account_locked, password_expired, authentication_string, Select_priv, Insert_priv, Update_priv, Delete_priv FROM mysql.user;
解释:
account_locked:账户是否被锁定(Y/N)。password_expired:密码是否过期(Y/N)。authentication_string:密码的加密哈希值(在 MySQL 5.7.6+ 中,此列取代了password列)。Select_priv,Insert_priv…:这些列表示用户的全局权限(是否为Y)。
3. 以更清晰的格式查看当前用户
如果你想查看当前登录的是哪个用户,可以使用以下函数:
SELECT CURRENT_USER();
输出示例:
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
4. 查看当前登录的用户(会话信息)
这个方法显示的是你通过哪个用户认证进入当前会话的,与 CURRENT_USER() 结果一致。
SELECT USER(); -- 或者 SELECT SYSTEM_USER();
方法二:使用图形化界面工具(如 phpMyAdmin, MySQL Workbench)
如果你使用图形化工具,操作会更简单直观。
- 登录到你的数据库管理工具。
- 在左侧的导航栏(对象浏览器)中,找到并点击 '用户和权限' 或 'Users and Privileges'。
- 点击后,工具会自动加载并显示一个所有用户的列表,通常会包含用户名、主机名以及一些基本权限信息。你可以点击具体的用户来查看和管理其详细权限。
重要提示和最佳实践
- 权限要求:执行
SELECT ... FROM mysql.user需要SELECT权限。通常只有 root 用户或具有全局权限的管理员用户才有此权限。 - 安全警告:
mysql.user表是系统核心表,不要直接使用DELETE,UPDATE,INSERT等语句修改它,除非你非常清楚自己在做什么。建议使用专门的 SQL 命令来管理用户,例如:- 创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password'; - 删除用户:
DROP USER 'username'@'host'; - 授予权限:
GRANT ... ON ... TO 'username'@'host';
- 创建用户:
- 密码字段:在 MySQL 5.7.6 及以上版本中,密码存储在
authentication_string列。在老版本(如 5.6)中,可能仍然叫Password列。如果你在查询密码哈希值时发现列为空,可能是因为用户使用了mysql_native_password之外的认证插件(如auth_socket)。
总结
对于绝大多数情况,你只需要记住并在 MySQL 命令行中执行这一条命令:
SELECT User, Host FROM mysql.user;
这就能清晰地列出数据库中的所有用户及其允许连接的主机,这是进行用户管理和权限排查的第一步。


