查看: 100|回覆: 0

查询MySQL用户两种的最常用方法总结

[複製鏈接]

6

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2008-7-23
發表於 2025-12-23 08:36:05 | 顯示全部樓層 |閲讀模式

前言

查询 MySQL 用户有多种方法,主要分为两大类:使用 MySQL 命令行工具使用图形化界面工具

我将以最常用和权威的命令行方式为主进行详细说明。

方法一:使用 MySQL 命令行工具(最直接的方法)

首先,你需要使用一个具有足够权限的账户(如 root 用户)登录到 MySQL 服务器。

mysql -u root -p

然后输入密码。

1. 查询所有用户列表(核心方法)

MySQL 将所有用户账户信息存储在默认数据库 mysqluser 表中。因此,直接查询该表即可。

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)

如果你使用图形化工具,操作会更简单直观。

  1. 登录到你的数据库管理工具。
  2. 在左侧的导航栏(对象浏览器)中,找到并点击 “用户和权限”“Users and Privileges”
  3. 点击后,工具会自动加载并显示一个所有用户的列表,通常会包含用户名、主机名以及一些基本权限信息。你可以点击具体的用户来查看和管理其详细权限。

重要提示和最佳实践

  1. 权限要求: 执行 SELECT ... FROM mysql.user 需要 SELECT 权限。通常只有 root 用户或具有全局权限的管理员用户才有此权限。
  2. 安全警告mysql.user 表是系统核心表,不要直接使用 DELETE, UPDATE, INSERT 等语句修改它,除非你非常清楚自己在做什么。建议使用专门的 SQL 命令来管理用户,例如:
    • 创建用户: CREATE USER 'username'@'host' IDENTIFIED BY 'password';
    • 删除用户: DROP USER 'username'@'host';
    • 授予权限: GRANT ... ON ... TO 'username'@'host';
  3. 密码字段: 在 MySQL 5.7.6 及以上版本中,密码存储在 authentication_string 列。在老版本(如 5.6)中,可能仍然叫 Password 列。如果你在查询密码哈希值时发现列为空,可能是因为用户使用了 mysql_native_password 之外的认证插件(如 auth_socket)。

总结

对于绝大多数情况,你只需要记住并在 MySQL 命令行中执行这一条命令

SELECT User, Host FROM mysql.user;

这就能清晰地列出数据库中的所有用户及其允许连接的主机,这是进行用户管理和权限排查的第一步。

回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部