菜鸟科技网

如何查看MySQL用户名和密码?

在MySQL数据库管理中,查看用户名和密码是常见的运维操作,但需要明确的是,出于安全考虑,MySQL并不会直接存储明文密码,而是通过特定的哈希算法(如mysql_native_password、sha256_password等)对密码进行加密存储,所谓的“查看密码”实际上是获取加密后的密码字符串,并可通过特定工具进行验证或重置,以下是详细的操作步骤、注意事项及相关场景分析。

如何查看MySQL用户名和密码?-图1
(图片来源网络,侵删)

准备工作:登录MySQL并访问权限库

在操作前,需要确保已具备MySQL的root管理员权限或具备mysql数据库的SELECT权限,登录MySQL的方式如下:

mysql -u root -p

输入root密码后进入MySQL命令行界面,MySQL的用户信息存储在mysql数据库的user表中,因此需要先切换到该数据库:

USE mysql;

查看用户名及加密密码

查询所有用户及其加密密码

执行以下SQL语句,可以查看所有用户的用户名(User列)、主机(Host列)及加密后的密码(authentication_string列):

SELECT User, Host, authentication_string FROM user;

示例输出: | User | Host | authentication_string | |------------|--------------|---------------------------------------------------------------------------------------| | root | localhost | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (SHA256哈希值) | | admin | 192.168.1.% | YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY | | test_user | % | (空值,表示无密码) |

如何查看MySQL用户名和密码?-图2
(图片来源网络,侵删)

注意事项:

  • Host列表示用户允许登录的主机,表示任意主机,localhost表示仅本地登录。
  • authentication_string列的值是加密后的密码,直接复制无法用于登录。

查看特定用户信息

若需查看某个具体用户的信息,可添加WHERE条件:

SELECT User, Host, authentication_string FROM user WHERE User = 'admin';

密码哈希算法说明

MySQL 5.7及以上版本默认使用mysql_native_passwordsha256_password算法加密密码,可通过以下语句查看用户的加密插件:

SELECT User, Host, plugin, authentication_string FROM user;

plugin列为mysql_native_password,则密码通过SHA1哈希处理;若为sha256_password,则使用更安全的SHA256算法。

如何查看MySQL用户名和密码?-图3
(图片来源网络,侵删)

密码重置与验证(替代“查看”明文密码)

由于无法直接获取明文密码,若需验证或重置密码,可通过以下方法:

重置用户密码(需root权限)

以重置admin用户密码为例:

-- 步骤1:停止MySQL服务(Linux系统)
sudo systemctl stop mysqld
-- 步骤2:跳过权限表启动MySQL
sudo mysqld_safe --skip-grant-tables &
-- 步骤3:登录并重置密码
mysql -u root
USE mysql;
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='admin';
FLUSH PRIVILEGES;
QUIT;
-- 步骤4:重启MySQL服务
sudo systemctl restart mysqld

注意: MySQL 8.0+版本中,PASSWORD()函数已被弃用,需使用mysql_native_password或 caching_sha2_password 插件的哈希函数,

ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'new_password';

使用mysql工具验证密码

通过mysql -u用户名 -p命令输入密码,若登录成功则密码正确,也可使用mysqladmin工具:

mysqladmin -u admin -p status

根据提示输入密码,若返回服务状态则验证通过。

安全建议

  1. 避免直接存储密码:应用程序应使用配置文件或环境变量存储密码,而非硬编码在代码中。
  2. 定期更换密码:建议每3个月更换一次高复杂度密码(包含大小写字母、数字及特殊字符)。
  3. 限制用户权限:遵循最小权限原则,仅为用户分配必要的数据库操作权限。
  4. 启用SSL连接:通过SSL/TLS加密客户端与MySQL的通信,防止密码被窃听。

常见问题处理

问题1:忘记root密码如何重置?

解答:

  1. 停止MySQL服务:sudo systemctl stop mysqld
  2. 跳过权限表启动:sudo mysqld_safe --skip-grant-tables --skip-networking &
  3. 登录并重置密码:
    mysql -u root
    UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
    FLUSH PRIVILEGES;
    QUIT;
  4. 重启服务:sudo systemctl restart mysqld

问题2:用户密码为空如何处理?

解答:
空密码存在安全风险,建议立即为用户设置密码,例如为test_user设置密码:

ALTER USER 'test_user'@'%' IDENTIFIED BY '强密码';
FLUSH PRIVILEGES;

若需临时允许空密码登录,需在my.cnf配置文件中添加skip-grant-tables,操作完成后务必关闭该选项。

通过以上方法,可以安全、合规地管理MySQL用户密码,确保数据库系统的安全稳定运行,在实际操作中,务必遵守最小权限原则,避免泄露敏感信息。

分享:
扫描分享到社交APP
上一篇
下一篇