You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中mysql2连接MySQL RDS(IAM角色)遇权限拒绝,如何启用明文插件?

使用IAM角色连接MySQL RDS时Node.js应用权限拒绝,命令行可成功连接

问题概况

同一EC2实例上,mysql命令行客户端通过IAM角色能正常连接MySQL RDS,但Node.js应用采用相同方式连接时触发权限拒绝。应用使用数据库密码而非IAM token时可正常连接,推测需为mysql2组件启用明文插件,但不清楚连接配置中对应的参数名称。

补充说明

  • 应用使用数据库用户密码可正常连接RDS;
  • AWS RDS、安全组及MySQL用户配置无问题:EC2命令行客户端(密码/token均可)、本地DBeaver(密码)、Node.js应用(密码)均能成功连接;
  • 命令行用token登录时必须添加--enable-cleartext-plugin参数,省略则同样出现权限拒绝,示例命令:
    mysql --host=[rds-database-endpoint] --port=3306 --enable-cleartext-plugin --user=[user-name] --password=[token generated using @aws-sdk/rds-signer]
    

当前Node.js连接代码

const mysql = require('mysql2');

async function connectToDb(){

  // 生成IAM认证token
  const { Signer } = require("@aws-sdk/rds-signer");

  const signer = new Signer({
    hostname: [aws-rds-databasehost-endpoint],
    port: 3306,
    username: [user-name],
    region: "us-east-2",
  });
  
  const token = await signer.getAuthToken();

  // 连接RDS实例
  const dbConnection = mysql.createConnection({
      host: 'host-details',
      user: 'user_name',
      password: token,
      database: 'database-name',
      // 猜测需添加类似enableCleartext: true的参数
  });

  return dbConnection;
}

解决方法

在mysql2的连接配置中,对应命令行--enable-cleartext-plugin的参数是enableCleartextPlugin,将其设为true即可。修改后的连接配置如下:

const dbConnection = mysql.createConnection({
    host: 'host-details',
    user: 'user_name',
    password: token,
    database: 'database-name',
    enableCleartextPlugin: true // 启用明文插件,适配RDS IAM认证
});

RDS IAM认证的token本身是经过AWS签名的安全字符串,无需加密传输,启用该插件后mysql2会以明文形式传递token,从而通过权限校验。

内容的提问来源于stack exchange,提问作者GenerikError

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:03:12