我正在尝试将在我们的 Kubernetes 集群(托管在 Google Container Engine 上)中作为 Docker 容器运行的服务器代码连接到 Google Cloud SQL 管理的 MySQL 5.7 实例。我遇到的问题是每个连接都被数据库服务器拒绝Access denied for user 'USER'@'IP' (using password: YES)
。数据库凭据(用户名、密码、数据库名称和 SSL 证书)都是正确的,并且在通过其他 MySQL 客户端或作为本地实例上的容器运行的同一应用程序连接时有效。
我已验证本地和服务器托管版本的应用程序的所有凭据都相同,并且我正在连接的用户已%
指定通配符主机。老实说,不太确定接下来要检查什么...
连接代码的编辑版本如下:
let connectionCreds = {
host: Config.SQL.HOST,
user: Config.SQL.USER,
password: Config.SQL.PASSWORD,
database: Config.SQL.DATABASE,
charset: 'utf8mb4',
};
if (Config.SQL.SSL_ENABLE) {
connectionCreds['ssl'] = {
key: fs.readFileSync(Config.SQL.SSL_CLIENT_KEY_PATH),
cert: fs.readFileSync(Config.SQL.SSL_CLIENT_CERT_PATH),
ca: fs.readFileSync(Config.SQL.SSL_SERVER_CA_PATH)
}
}
this.connection = MySQL.createConnection(connectionCreds);
附加信息:服务器应用程序是在 Node 中构建的,使用mysql2库连接到数据库。没有任何特殊的防火墙规则会导致网络问题,这可以通过库正在连接但无法进行身份验证的事实得到证实。