#javascript #node.js #sql-server #azure-functions #tedious
Вопрос:
Я пытаюсь подключить свое приложение-функцию Azure к управляемому серверу SQL с помощью утомительного и управляемого удостоверения службы (MSI). Сначала я перешел по этим ссылкам, чтобы создать свои функции : 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
Я добавил имя функции приложения в базу данных. Я разработал функцию с помощью утомительного и заполнил значение аутентификации «azure-active-directory-msi-app-service». Вот пример моего кода :
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:homesitewwwrootnode_modulestediousliberrors.js:13:12)at Parser.<anonymous>
(C:homesitewwwrootnode_modulestediouslibconnection.js:1184:51)at Parser.emit (events.js:315:20)at Readable.<anonymous>
(C:homesitewwwrootnode_modulestediouslibtokentoken-stream-parser.js:27:14)at Readable.emit (events.js:315:20)at addChunk
(C:homesitewwwrootnode_modulesreadable-streamlib_stream_readable.js:298:12)at readableAddChunk
(C:homesitewwwrootnode_modulesreadable-streamlib_stream_readable.js:280:11)at Readable.push
(C:homesitewwwrootnode_modulesreadable-streamlib_stream_readable.js:241:10)at
C:homesitewwwrootnode_modulesreadable-streamlibinternalstreamsfrom.js:49:29at Generator.next (<anonymous>) {code: 'ELOGIN'}
Не могли бы вы, пожалуйста, помочь мне найти причину проблемы ? Есть ли дополнительная конфигурация, которую я не делал в SQL cloud ?
Заранее спасибо.
Овации,
Ответ №1:
Согласно документам, свойство аутентификации не должно быть заглавным. Поскольку он не находит параметр msi, он по умолчанию возвращается к проверке подлинности пользователя/пароля, которую вы не установили.
authentication: {
type: 'azure-active-directory-msi-app-service',
}