连接MySQL报sha256_password requires SSL接口错误如何解决
错误原因
- 报错核心原因是你连接的MySQL账号使用了
sha256_password身份认证插件,该插件默认强制要求数据库连接必须通过SSL加密通道建立;你当前编写的SQLAlchemy连接代码没有配置任何SSL相关参数,底层的mysql-connector驱动检测到连接不符合安全要求,直接抛出接口错误。
可行修复方案
根据使用场景不同,可选择以下任意一种方案修复:
方案1:配置SSL连接(推荐生产环境使用,符合安全规范)
不需要额外修改数据库侧配置,只需要在创建引擎时补充SSL参数即可。如果是内网测试环境不需要校验证书合法性,可以直接在连接串后追加参数:engine = sqlalchemy.create_engine( f'mysql+mysqlconnector://{user}:{password}@{server}:{port}/{schema}?ssl_verify_cert=false', echo=False )如果是生产环境需要使用正规CA证书校验,可通过
connect_args传入证书路径配置:engine = sqlalchemy.create_engine( f'mysql+mysqlconnector://{user}:{password}@{server}:{port}/{schema}', connect_args={ "ssl_ca": "/path/to/ca.pem", "ssl_cert": "/path/to/client-cert.pem", "ssl_key": "/path/to/client-key.pem" }, echo=False )方案2:修改数据库用户认证插件(适合本地开发/测试环境)
直接将目标账号的认证插件改为无强制SSL要求的mysql_native_password,不需要修改业务侧连接代码。登录MySQL后执行如下SQL即可:-- 替换成实际的账号名、允许访问的主机地址、账号密码 ALTER USER 'your_username'@'your_access_host' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;方案3:允许公钥检索跳过SSL
在创建引擎时通过连接参数关闭SSL、允许公钥检索,直接建立非加密连接:engine = sqlalchemy.create_engine( f'mysql+mysqlconnector://{user}:{password}@{server}:{port}/{schema}', connect_args={ "allow_public_key_retrieval": True, "ssl_disabled": True }, echo=False )该方案存在账号密码、传输数据明文泄露风险,仅限本地临时调试使用,禁止生产环境使用
内容的提问来源于stack exchange,提问作者Astro_Scientist97
相关产品推荐
相关产品推荐

