我正在尝试使用通过AWS Lambda运行的功能连接到AWS RDS上托管的MySQL(5.7.22)数据库,但是由于身份验证错误,无法使用pymysql
连接到数据库:{ {1}}。奇怪的是,在我一直用于调试问题的AWS实例上,我发现我能够使用与"Access denied for '<user>'@'<host>' (using password: YES)"
相同的参数连接到数据库。
如果相关,我的密码仅包含字母数字字符。
这是我使用mysqlclient
库(使用裸库产生相同结果)通过两个软件包连接到数据库的一个最小示例:
records
import pymysql
import MySQLdb
config = {} # Dictionary with database credentials.
MySQLdb.connect(
hostname=config['host'],
port=config["port"],
user=config['username'],
passwd=config['password'],
db=config['database'],
connect_timeout=5,
)
# Works fine
pymysql.connect(
hostname=config['host'],
port=config["port"],
user=config['username'],
passwd=config['password'],
db=config['database'],
connect_timeout=5,
)
# raises pymysql.err.OperationalError: (1045, "Access denied for user '<user>'@'<host>' (using password: YES)")
是否支持某些数据库配置或需要其他选项?
答案 0 :(得分:0)
事实证明,问题在于我需要指定SSL CA(可以在here上找到RDS根证书):
pymysql.connect(
hostname=config['host'],
port=config["port"],
user=config['username'],
passwd=config['password'],
db=config['database'],
connect_timeout=5,
ssl={"ca": "./rds-ca-2015-root.pem"},
)
我不确定MySQLdb
软件包如何避免此步骤。