在 Linux 服务器运维与数据库管理中,掌握 MySQL 用户信息的查看能力是保障数据安全与进行权限审计的基础。在 Linux 环境下查看 MySQL 用户,最核心且权威的方法是通过命令行终端登录 MySQL 数据库,直接查询系统表 mysql.user 或使用专门的管理命令。 这种方式不仅能获取用户名列表,还能详细展示用户的访问主机、密码加密状态以及全局权限,是数据库管理员必须熟练掌握的核心技能。

前置准备:登录 MySQL 数据库
在执行查看操作之前,必须确保已具备 Linux 服务器的登录权限以及 MySQL 数据库的管理权限,通常建议使用 root 用户或具有 SELECT 权限的普通用户进行操作。
通过 Linux 终端登录 MySQL,在命令行输入以下命令并输入密码:
mysql -u root -p
登录成功后,你将进入 MySQL 的命令行交互界面,此时即可执行具体的查询语句。
核心方法一:查询系统表获取详细信息
这是最专业、最全面的查看方式,MySQL 将所有用户信息存储在名为 mysql 的系统数据库中的 user 表里,通过标准的 SQL 语句查询该表,可以获得最原始的数据。
查看所有用户及主机信息
执行以下 SQL 语句:
SELECT user, host FROM mysql.user;
输出结果解读:
- user:表示登录 MySQL 的用户名。
- host:表示允许该用户从哪台主机登录,这是 MySQL 权限体系中的关键概念,
localhost表示仅限本机, 表示任意远程主机,特定 IP 则表示仅限该 IP 访问。
查看用户详细信息(包含权限字段)
如果需要更深入地了解用户的全局权限,可以使用以下命令:
SELECT * FROM mysql.user\G
这里使用了 \G 代替分号,它能让查询结果以垂直列表的形式展示,避免了字段过多导致在终端中显示错乱。此命令将展示用户的插件、密码过期状态、SSL 要求以及 Select_priv、Insert_priv 等全局权限开关(Y/N)。

核心方法二:使用 SHOW 命令快速查看
除了直接查询表,MySQL 提供了专门的管理命令,语法更为简洁,适合快速查看当前会话或所有用户。
查看当前登录用户
SELECT current_user();
此命令用于确认当前会话是以哪个身份运行的,在权限调试时非常有用。
查看所有用户
虽然 SHOW users 命令并不存在,但可以通过以下变通方式快速列出用户:
SELECT DISTINCT user FROM mysql.user;
进阶实战:查看用户权限与属性
仅仅知道用户名是不够的,专业的运维还需要了解用户的具体权限范围。
查看特定用户的权限
使用 SHOW GRANTS 命令可以清晰地看到用户被授予了哪些权限,查看 root 用户的权限:
SHOW GRANTS FOR 'root'@'localhost';
输出结果解读:
结果通常会显示 GRANT ALL PRIVILEGES ON *.* TO ...,表示该用户拥有所有数据库的所有权限,如果是普通用户,可能会看到 GRANT SELECT, INSERT ONdb_name.* TO ...,表示仅拥有特定库的特定权限。这是进行权限审计和最小权限原则检查的最有效手段。
Linux Shell 端非交互式查看

为了提高效率,或者将查看结果集成到 Shell 脚本中,可以直接在 Linux 终端执行 MySQL 命令,而无需进入 MySQL 交互界面。
mysql -u root -p -e "SELECT user, host FROM mysql.user;"
专业见解: 这种方式非常适合自动化运维脚本,在监控系统中,可以通过该命令定期检查是否有未授权的新用户被创建,从而触发报警。
深度解析:Host 字段的匹配原则
在查看用户时,很多初学者会对 Host 字段产生误解,理解这一字段对于排查“无法登录”问题至关重要。
- 精确匹配优先:当用户
admin从168.1.10登录时,MySQL 会优先查找admin@192.168.1.10。 - 通配符匹配:如果没有精确匹配,MySQL 会查找
admin@'%'。 - localhost 的特殊性:
localhost在 MySQL 中具有特殊含义,它通常通过 Unix Socket 文件连接,而不是 TCP/IP,如果发现用户无法从本机登录,检查是否存在user@localhost记录往往是解决问题的关键。
安全与最佳实践
在执行查看操作时,必须遵循 E-E-A-T 原则中的安全与可信原则。
- 避免明文密码:在查看
mysql.user表时,authentication_string字段显示的是加密后的哈希值,绝非明文密码,如果该字段为空,说明该用户可以无密码登录,这是极大的安全隐患,应立即修复。 - 权限隔离:不要让应用开发人员拥有查看
mysql.user表的权限,查看用户列表应当仅限于 DBA(数据库管理员)。 - 定期审计:建议定期执行查看用户命令,对比基线数据,确保没有多余的“幽灵”账号,特别是要关注那些 Host 为 且拥有高权限的账号。
常见问题排查
如果在查看过程中遇到 Access denied 错误,说明当前登录的 MySQL 用户没有读取 mysql 系统库的权限,此时需要切换到具有 SELECT 权限的账号(通常是 root)进行操作。
相关问答
Q1:在 Linux 下如何重置 MySQL 的 root 密码?
A: 首先需要在 Linux 终端停止 MySQL 服务(如 systemctl stop mysqld),然后使用 --skip-grant-tables 参数安全模式启动数据库,这会跳过权限检查,接着登录 MySQL,使用 UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root'; 修改密码,最后刷新权限(FLUSH PRIVILEGES;)并重启 MySQL 服务即可。
Q2:如何删除一个不再使用的 MySQL 用户?
A: 确认用户不再使用后,可以使用 SQL 命令 DROP USER 'username'@'host'; 进行删除,必须同时指定用户名和主机名,因为 username@localhost 和 username@% 在 MySQL 中是两个完全不同的用户,删除后建议执行 FLUSH PRIVILEGES; 确保权限表立即生效。

















