SQL Server始终使用Node.js进行加密/列加密



是否有人使用Column Encryption和Node.js成功使用SQL Server 2019?如果是,您使用的包是什么?我得到的最接近的连接是使用ColumnEncryption=Enabled的ODBC Driver 17。我可以用这个连接查询表,但当我尝试查询EncryptedColumn时,我得到的只是[nodemon] app crashed...,没有错误,没有异常或任何东西。

我还尝试过几种不同版本的ODBC驱动程序,但都没有成功。

import { SqlClient } from "msnodesqlv8";
const sql: SqlClient = require("msnodesqlv8");
const connectionString = `server=SERVER\DEV;Trusted_Connection=Yes;Driver={ODBC Driver 17 for SQL Server};encrypt=yes;trustServerCertificate=yes;ColumnEncryption=Enabled;`;
// queryA results in [nodemon] app crashed - ...
const queryA = `select *  from [database].[dbo].[table]; `;
// queryB results in returning the id of the record in the table
const queryB = `select id from [database].[dbo].[table]; `; 
export default () => {
try {
sql.query(connectionString, queryA, (err, rows) => {
console.log({ err });
console.log(rows);
}
);
} catch (error) {
console.log({ error });
}
};

依赖

msnodesqlv8@2.6.0
mssql@9.0.1

尝试将ColumnEncryption更改为Column Encryption Setting。我不使用node.js,但当数据库具有Always Encrypted列时,我的所有SQL server连接字符串都使用Column Encryption Setting=Enabled

您还可以检查您的应用程序是否具有对"始终加密证书"的正确安全访问权限,该证书是由SQL服务器创建的,用于加密您的"管理计算机证书"存储中的数据。我知道我有几次忘记给试图查询加密列的应用程序权限。

作为加密列的新手,这对我来说是一次学习经历。

事实证明,解决方案是,加密证书"始终加密证书"的副本需要在本地计算机上,通过加密列连接到服务器。这一点我并不清楚,但事后看来是有道理的。

在将证书导入到本地计算机后,导入到localMachine存储(而不是用户存储(,但是我的。Net测试应用程序和我的Node.js应用程序能够访问和解密加密的列。

始终加密:无法使用密钥存储提供程序解密列加密密钥:';MSSQL_CERTIFICATE_STORE';作者:lucasreta

附录这只适用于从加密列中读取。两周后,我仍然无法将记录插入到具有加密列的表中。

最新更新