从 linux 机器上的 nodejs 连接到带有 Active Directory 的 Sql 服务器

connect to Sql Server with Active Directory from nodejs on a linux machine

我有一个在 linux 机器 上运行的 nodejs 服务。 我需要连接到 Sql 服务器 (Mssql)。

我正在使用 mssql 包,但我没有看到任何与 AD 连接的支持。

还有一个 Azure Keyvault,我们可以通过调用以下方式连接到连接到机器的 MSI:

import * as msRestAzure from 'ms-rest-azure'
msRestAzure.loginWithVmMSI({ resource: this.azureKeyVaultResourceName })

有没有办法使用我从 loginWithVmMSI 获得的凭据并连接到 Sql 服务器? 有没有办法直接用AD调用Sql服务器?

其他驱动程序是否支持它?繁琐还是nodemssql?

如果你可以使用 Tedious(从 tedious@4.1.0 开始支持 Azure AD)。

有一个 top-level authentication 选项允许指定要使用的身份验证方法:

new Connection({
  'config': {
    'server': '<server>',
    'authentication': {
      'type': 'azure-active-directory-password',
      'options': {
        'userName': '<userName>',
        'password': '<password>'
      }
    },
    'options': {
      'encrypt': true
    }
  }
})

至于集成安全部分(MSI 身份验证支持),目前 (19.5.2019) pull request 待处理 github。如果它获得 approved/accepted,您将获得支持 - 您也可以手动添加它。

配置如下所示

简单的连接配置:

var connectionADMSI = {
    server: [Server Name], 
    options: {
        database:[Database Name],
        encrypt: true
    },
    authentication: {
        type: "azure-active-directory-MSI",
        // Option client id, if provided, then the token will be only valid for that user
        options: {
        clientID: [Client ID For User Assigned Identity]
        }
    }
};

如果您使用 msnodesqlv8,那您就倒霉了。这是 windows 唯一的解决方案,linux 尚不支持。出于信息目的,我包括如何连接它:

// Init connection string
var dbConfig = {    
    driver: 'msnodesqlv8',
    connectionString:'Driver={SQL Server Native Client 11.0};Server={localhost\SQLNode};Database={nodedb};Trusted_Connection={yes};'
};