FastAPI 登录接口突然报错:cryptography 缺失与 MySQL 认证机制踩坑实录
数据库 Python 后端开发 caching_sha2_password cryptography MySQL FastAPI 6

背景

项目的用户登录API(FastAPI + aiomysql)一直稳定运行,今天突然发现用户无法登录,接口报500错误,但验证码接口依然正常。排查日志发现如下异常:

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

现象与初步分析

  • 验证码接口正常,说明API主流程和依赖大体无误,数据库连接相关接口异常。
  • 报错指向 aiomysql/pymysql 认证阶段,提示缺少 cryptography 包。
  • API代码近期无改动,但昨晚对 MySQL 数据库做过操作。

详细排查过程

1. 复现与日志定位

  • 访问 /user/login 报 500 错误,日志显示 cryptography 缺失。
  • 访问 /user/captcha 正常,说明 FastAPI 路由和大部分依赖无异常。

2. 检查 MySQL 用户认证方式

进入 MySQL,执行:

SELECT user, host, plugin FROM mysql.user WHERE user = 'user';

结果:

userhostplugin
user%caching_sha2_password

说明当前 API 用的数据库用户采用 caching_sha2_password 认证方式。

3. 尝试切换为 mysql_native_password

执行:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';

报错:

ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

进一步查询 MySQL 版本为 8.4.4,发现 8.4.x 已彻底移除 mysql_native_password 插件(官方安全策略升级),无法再切换认证方式。

4. 检查 Python 依赖

  • requirements.txt 已未包含 cryptography,且实际运行环境中缺失。
  • 尝试激活虚拟环境 ai_env,发现目录不存在或路径不对。
  • 最终确认 API 实际运行在本地虚拟环境 ai_env,但该环境未正确安装依赖或被破坏。

5. 问题根因推测

  • MySQL 8.4.x 只支持 caching_sha2_password/sha256_password,必须依赖 cryptography 包。
  • 昨晚对 MySQL 做过操作,可能重置了用户认证方式或触发了依赖校验,导致原本可用的认证方式失效。
  • 虚拟环境依赖未持久化或被清理,cryptography 包丢失。

解决方法

  1. 激活虚拟环境(假设在项目根目录):

    source ai_env/bin/activate
    
  2. 安装 cryptography 依赖

    pip install cryptography
    

    或确保 requirements.txt 中有 cryptography 后:

    pip install -r requirements.txt
    
  3. 重启主程序/服务,验证登录接口恢复正常。


总结与经验

  • MySQL 8.0.33+ 逐步弃用 mysql_native_password,8.4.x 已彻底移除,务必关注官方变更日志。
  • caching_sha2_password/sha256_password 认证方式在 Python 侧必须有 cryptography 包支持。
  • 生产环境建议所有依赖写入 requirements.txt,并定期检查虚拟环境依赖完整性。
  • 容器/虚拟环境重建后,务必重新安装所有依赖,避免因依赖丢失导致线上故障。
  • 数据库用户认证方式变更、密码重置等操作,可能影响现有服务的认证链路。

最终解决方案
增加依赖包 cryptography 并安装,重启主程序后问题解决。问题产生的原因推测为昨晚对 MySQL 数据库的操作导致认证方式校验失效,进而暴露出 Python 依赖缺失的问题。


如遇类似问题,优先检查数据库认证方式与 Python 依赖链,避免踩坑!

FastAPI 登录接口突然报错:cryptography 缺失与 MySQL 认证机制踩坑实录
https://sisuad.cn/archives/630aa71c-2a1e-4476-8119-a6649ec25a37
作者
Engr_Peng
发布于
更新于
许可