郎头疼 發表於 2025-12-23 08:36:05

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

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