Google Cloud Platform SQL 实例将不接受使用自定义用户凭据的 **nodejs 应用程序** 连接

Google Cloud Platform SQL instance won't accept **nodejs application** connections using custom user credentials

我已将我的 IP 列入白名单,并且能够在我的终端中使用 sqlcmd 实用程序连接到 google 云平台 sqlserver 实例。

sqlcmd -S <ip-address> -U <username> -P<password>

但是,当我在同一台机器上从我的节点应用程序尝试同样的尝试时,我无法连接:

我的配置:

const sql = require('mssql')

const dconfig = {
  server: 'X.X.X.X',
  authentication: {
    type: 'default',
    options: {
      userName: '<username>',
      password: '<password>'
    }
  },
  database: 'logs',
  options: {
    appname: 'ms-inx-notify-prod'
  }
}

const cpool = new sql.ConnectionPool(dconfig).connect().catch((err) => { console.log(err) })

当我连接到我安装的本地 sqlserver 实例时,此配置选项有效,但是当我更改一些参数以指向 GCP 数据库时,它没有成功连接。

这是错误:

{ ConnectionError: Login failed for user 'username'. at ConnectionError (/home/ziggyjosh16/Projects/Node/node_modules/tedious/lib/errors.js:13:12) at Parser.tokenStreamParser.on.token (/home/ziggyjosh16/Projects/Node/node_modules/tedious/lib/connection.js:818:51) at Parser.emit (events.js:193:13) at Parser.parser.on.token (/home/ziggyjosh16/Projects/Node/node_modules/tedious/lib/token/token-stream-parser.js:33:14) at Parser.emit (events.js:193:13) at addChunk (/home/ziggyjosh16/Projects/Node/node_modules/readable-stream/lib/_stream_readable.js:297:12) at readableAddChunk (/home/ziggyjosh16/Projects/Node/node_modules/readable-stream/lib/_stream_readable.js:279:11) at Parser.Readable.push (/home/ziggyjosh16/Projects/Node/node_modules/readable-stream/lib/_stream_readable.js:240:10) at Parser.Transform.push (/home/ziggyjosh16/Projects/Node/node_modules/readable-stream/lib/_stream_transform.js:139:32) at doneParsing (/home/ziggyjosh16/Projects/Node/node_modules/tedious/lib/token/stream-parser.js:114:14) message: "Login failed for user 'username'.", code: 'ELOGIN' }, name: 'ConnectionError' }

(编辑):我还发现,如果您使用 MSSQL 默认用户帐户进行连接 (sqlserver),则上述代码可以成功运行。我认为这是 google 帐户平台角色的问题。 GCP 中是否有允许我连接的选项或设置?

我对mssql不太熟悉,但我认为配置没有使用authentication标签,而是直接使用userpassword标签?

查看 mssql 文档:https://www.npmjs.com/package/mssql#general-same-for-all-drivers

我想我发现了问题:您需要执行 ALTER ROLE 来为新用户分配角色。我在没有执行该步骤的情况下创建新用户时重现了您的错误,但现在我可以创建新用户并与他们建立良好的联系。我为新用户提供了内置 db_ddladmin 角色,因此它能够创建 table.

这是一个 Python 脚本,它为 SQL 服务器身份验证创建一个新用户,然后以该用户身份连接:https://gist.github.com/dmahugh/ae0b829f85c3bbd9ba332712b305bf6b

我不熟悉 Tedious,但看起来你用 connection.execSQL() 向它传递了 SQL 命令,所以你应该能够像那个要点中的示例那样做一些事情,并且然后您可以像连接 sqlserver 默认管理员帐户一样以新用户身份连接。