尝试连接PlanetScale数据库时遭遇Access Denied错误求助
解决PlanetScale数据库连接的权限拒绝问题
问题重现
尝试连接PlanetScale数据库时遭遇权限拒绝错误,代码如下:
from sqlalchemy import create_engine, text db_connection_string = "mysql+pymysql://dvgrfhodw7c31y4ss9j5:dvgrfhodw7c31y4ss9j5@aws.connect.psdb.cloud/aws.connect.psdb.cloud?charset=utf8mb4" engine = create_engine( db_connection_string, connect_args= { "ssl": { "ssl_ca": "/etc/ssl/cert.pem" } } ) with engine.connect(db_connection_string) as conn: result = conn.execute(text("select * from jobs")) print(result.all())
错误信息:
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'dvgrfhodw7c31y4ss9j5'")
解决方案
1. 修正数据库连接字符串格式
你的连接字符串存在错误:@aws.connect.psdb.cloud 之后的部分应该是实际的数据库名称,而非重复主机地址。正确格式应为:
db_connection_string = "mysql+pymysql://dvgrfhodw7c31y4ss9j5:你的密码@aws.connect.psdb.cloud/你的数据库名?charset=utf8mb4&ssl-mode=REQUIRED"
注意替换你的密码和你的数据库名为PlanetScale控制台中对应的信息。
2. 修正engine.connect()的调用方式
engine.connect()不需要传入连接字符串参数,直接调用即可:
with engine.connect() as conn: result = conn.execute(text("select * from jobs")) print(result.all())
3. 验证PlanetScale用户权限
- 登录PlanetScale控制台,确认当前用户
dvgrfhodw7c31y4ss9j5拥有目标数据库的读写权限(至少需要读权限执行SELECT操作)。 - 检查用户IP访问限制:在PlanetScale数据库的"Settings" > "IP allowlist"中,确认你的当前IP已添加到允许列表,或临时开启"Allow all IPs"(仅测试环境建议使用,生产环境需严格限制)。
4. 确认SSL配置正确性
PlanetScale要求强制SSL连接,确保SSL配置有效:
- 对于Linux/macOS,
/etc/ssl/cert.pem通常是正确的系统根证书路径; - 对于Windows,可使用系统内置根证书,或从可信渠道获取根证书文件并指定其路径。
也可以简化SSL配置,使用ssl_mode替代手动指定证书路径:
engine = create_engine( db_connection_string, connect_args={"ssl": {"ssl_mode": "REQUIRED"}} )
内容的提问来源于stack exchange,提问作者Gabriel Elufidodo
相关产品推荐
相关产品推荐

