You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

node-mssql(依赖tedious)是否支持SQL Server列加密/Always Encrypted及使用方法

node-mssql对SQL Server Always Encrypted的支持及使用方法

支持情况

最新版本的node-mssql完全支持SQL Server的Column Encryption / Always Encrypted特性。因为node-mssql底层依赖的tedious库已实现该特性支持,node-mssql会直接复用这一能力。

使用步骤

1. 安装/更新依赖

确保使用最新版node-mssql(会自动关联兼容的tedious版本):

npm install mssql@latest

2. 配置连接参数

在连接配置中需启用列加密设置,并根据密钥存储方式配置对应密钥提供者,以下是两种常见场景示例:

场景1:使用Windows本地证书存储

const sql = require('mssql');

const config = {
  user: '你的数据库账号',
  password: '你的数据库密码',
  server: '你的SQL Server地址',
  database: '目标数据库名',
  options: {
    encrypt: true, // Always Encrypted依赖基础SSL加密
    columnEncryptionSetting: 'Enabled', // 启用列加密功能
    cryptoCredentialsDetails: {
      // 填写SQL Server中配置的列主密钥对应的证书指纹
      certificateThumbprint: '你的证书指纹'
    }
  }
};

场景2:使用Azure Key Vault

const sql = require('mssql');
const { DefaultAzureCredential } = require('@azure/identity');

const config = {
  user: '你的数据库账号',
  password: '你的数据库密码',
  server: '你的SQL Server地址',
  database: '目标数据库名',
  options: {
    encrypt: true,
    columnEncryptionSetting: 'Enabled',
    // 传入Azure身份凭证,用于访问Key Vault中的密钥
    azureKeyVaultCredentials: new DefaultAzureCredential()
  }
};

3. 执行数据库操作

配置完成后,可像正常操作数据库一样读写加密列,node-mssql会自动处理加密和解密:

查询加密列

async function queryEncryptedData() {
  try {
    await sql.connect(config);
    const result = await sql.query`SELECT id, encrypted_phone FROM user_info WHERE id = 5`;
    console.log('查询结果:', result.recordset); // encrypted_phone字段会自动解密为明文
  } catch (err) {
    console.error('查询失败:', err);
  } finally {
    await sql.close();
  }
}

queryEncryptedData();

插入数据到加密列

async function insertEncryptedData() {
  try {
    await sql.connect(config);
    const result = await sql.query`INSERT INTO user_info (name, encrypted_phone) VALUES ('张三', '138xxxx1234')`;
    console.log('插入成功,影响行数:', result.rowsAffected);
  } catch (err) {
    console.error('插入失败:', err);
  } finally {
    await sql.close();
  }
}

insertEncryptedData();

注意事项

  • 需确保SQL Server端已完成Always Encrypted配置:包括创建列主密钥、列加密密钥,以及为目标列启用加密规则。
  • 客户端需具备密钥存储的访问权限:本地证书需安装在客户端机器的证书存储中,Azure Key Vault需为客户端身份配置密钥读取权限。
  • 避免对加密列使用需明文计算的SQL函数(如LIKE、字符串拼接等),这类操作无法在客户端解密后执行,会触发SQL Server报错。

内容的提问来源于stack exchange,提问作者Jithu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:52:38