我正在尝试使用乏味和托管服务标识 (MSI) 将我的 Azure 函数应用连接到托管 SQL 服务器。 首先,我按照这个链接来构建我的函数: https://docs.microsoft.com/fr-fr/azure/azure-sql/database/connect-query-nodejs?tabs=windows https://medium.com/swlh/a-node-function-app-to-get-json-results-from-azure-synapse-analytics-e671dd6ae827
我在数据库中添加了应用程序函数的名称。我使用 Tedious 开发了该功能,并用“azure-active-directory-msi-app-service”填充了 auth 值。 这是我的代码示例:
const { Connection, Request } = require('tedious');
module.exports = function (context, req) {
// Create array to store the query results
let result = [];
let rowData = {};
const config = {
server: 'XXXXXX.public.XXXXXX.database.windows.net',
Authentication: {
type: 'azure-active-directory-msi-app-service',
},
options: {
database: 'YYYYY',
encrypt: true,
port: 3342,
connectTimeout: 120000
}
}
// Create query to execute against the database
const queryText = `SQL QUERY`;
context.log('Query selected : ' + queryText);
const connection = new Connection(config);
// Create Request object
const request = new Request(queryText, (err) => {
connection.close();
if (err) {
// Error in executing query
context.log.error(err);
context.res.status = 500;
context.res.body = 'Error executing the query';
} else {
context.res = {
status: 200,
isRaw: true,
body: result,
headers: {
'Content-Type': 'application/json'
}
}
}
// Inform Azure Function runtime that work is done
context.done();
});
connection.connect();
// Manipulate the results and create JSON
request.on('row', function (columns) {
rowData = {};
columns.forEach(function (column) {
rowData[column.metadata.colName] = column.value;
});
result.push(rowData);
});
// Attempt to connect and execute queries if connection goes through
connection.on('connect', function (err) {
if (err) {
// Error in connecting
context.log.error(err);
context.res.status = 500;
context.res.body = 'Error connecting to Azure SQL server';
context.done();
} else {
// Connection succeeded
context.log('Connection succeeded');
connection.execSql(request);
}
});
}
我总是收到验证错误:
2021-07-22T12:16:22.925 [Error] ConnectionError: Login failed for user ''.at ConnectionError
(C:\home\site\wwwroot\node_modules\tedious\lib\errors.js:13:12)at Parser.<anonymous>
(C:\home\site\wwwroot\node_modules\tedious\lib\connection.js:1184:51)at Parser.emit (events.js:315:20)at Readable.<anonymous>
(C:\home\site\wwwroot\node_modules\tedious\lib\token\token-stream-parser.js:27:14)at Readable.emit (events.js:315:20)at addChunk
(C:\home\site\wwwroot\node_modules\readable-stream\lib\_stream_readable.js:298:12)at readableAddChunk
(C:\home\site\wwwroot\node_modules\readable-stream\lib\_stream_readable.js:280:11)at Readable.push
(C:\home\site\wwwroot\node_modules\readable-stream\lib\_stream_readable.js:241:10)at
C:\home\site\wwwroot\node_modules\readable-stream\lib\internal\streams\from.js:49:29at Generator.next (<anonymous>) {code: 'ELOGIN'}
你能帮我找出问题出在哪里吗?有没有我没有在 SQL 云上做的额外配置?
提前致谢。
干杯,
答案 0 :(得分:0)
根据文档,身份验证属性不应大写。由于它没有找到 msi 设置,它默认返回到您尚未设置的用户/密码身份验证。
authentication: {
type: 'azure-active-directory-msi-app-service',
}