【发布时间】:2021-10-07 03:21:52
【问题描述】:
我读到 mssql 模块在内部使用 Tedious 连接到 azure sql db。因此,我正在尝试使用 azure-active-directory-access-token 建立连接。但是,我收到错误 ConnectionError:用户令牌识别的主体登录失败
示例代码:-
const mssql = require('mssql');
const msrestAzure = require("ms-rest-azure");
const clientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
const serverName = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
const databaseName = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
const clientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
const tenantId = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
let token = 0;
msrestAzure.loginWithServicePrincipalSecret(clientId,
clientSecret,
tenantId,
{
tokenAudience: "https://database.windows.net/",
},
).then((databaseCredentials) => {
return new Promise((resolve, reject) => {
databaseCredentials.getToken((err, results) => {
if (err) return reject(err);
resolve(results.accessToken);
});
});
}).then((token) => {
// console.log(token);
var config = {
server: serverName,
authentication: {
type: "azure-active-directory-access-token",
options: {
token: token,
}
},
options: {
database: databaseName,
encrypt: true,
}
};
return new mssql.connect(config);
}).then(pool => {
console.log('Connected to MSSQL')
return pool;
}).catch((error) => {
console.log(error);
});
【问题讨论】:
-
我们在 npm 上的文档非常有限 mssql 支持身份验证类型 azure-active-directory-access-token 以连接到 azure sql 服务器,因此现在作为解决方法建议您在配置中添加这些详细信息登录 SQL Server 并尝试执行
-
var config = { 用户:'...',密码:'...',服务器:'XXX.XXX.X.XXX',驱动程序:'msnodesql',数据库:'XXXXXXXXXXXX ', connectionString: "Driver={SQL Server Native Client 11.0};Server=#{server}\\sql;Database=#{database};Uid=#{user};Pwd=#{password};" };参考:stackoverflow.com/questions/21204411/…
标签: node.js azure azure-authentication tedious node-mssql