如何通过Tedious为Sequelize ORM配置Azure用户分配托管标识连接Azure SQL
解决方案
Sequelize完全支持使用用户分配托管标识(User-Assigned Managed Identity)认证连接Azure SQL,无需修改原有业务逻辑,仅需调整连接配置即可完成升级。
配置步骤
前置准备
- 完成用户分配托管标识与目标Azure App Service的关联
- 为该托管标识分配目标Azure SQL数据库的对应访问权限
- 安装所需依赖包:
npm install @azure/identity tedious sequelize
连接配置示例
const { Sequelize } = require('sequelize'); const { DefaultAzureCredential } = require('@azure/identity'); // 建议所有配置从环境变量读取,不要硬编码 const MANAGED_IDENTITY_CLIENT_ID = process.env.MANAGED_IDENTITY_CLIENT_ID; const SQL_SERVER = process.env.SQL_SERVER; const SQL_DATABASE = process.env.SQL_DATABASE; const credential = new DefaultAzureCredential({ managedIdentityClientId: MANAGED_IDENTITY_CLIENT_ID }); const sequelize = new Sequelize(SQL_DATABASE, null, null, { host: SQL_SERVER, dialect: 'mssql', dialectOptions: { authentication: { type: 'azure-active-directory-service-principal-secret', options: { tokenProvider: async () => { const accessToken = await credential.getToken('https://database.windows.net/.default'); return accessToken.token; } } }, options: { encrypt: true, // Azure SQL强制要求加密连接 database: SQL_DATABASE } } }); // 连接验证 sequelize.authenticate() .then(() => console.log('托管标识认证连接成功')) .catch(err => console.error('连接失败:', err));
注意事项
- 依赖版本要求:Sequelize ≥ v6,Tedious ≥ v14,低于对应版本建议先升级依赖避免兼容性问题
- 本地调试时如果已经通过Azure CLI登录了有权限的账号,DefaultAzureCredential会自动读取本地凭证,不需要额外修改配置即可调试
- 所有敏感配置建议存放在Azure App Service的应用配置中,通过环境变量读取,不要硬编码在代码中
内容的提问来源于stack exchange,提问作者Dylan Kennard
相关产品推荐
相关产品推荐

