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
标签,而是直接使用user
和password
标签?
查看 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 默认管理员帐户一样以新用户身份连接。
我已将我的 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
标签,而是直接使用user
和password
标签?
查看 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 默认管理员帐户一样以新用户身份连接。