使用 Node.JS 和 SQL 服务器始终加密时插入数据库时​​出错

Error inserting into database with Node.JS and SQL Server Always Encrypted

我使用具有 Always Encrypted 功能的 SQL 服务器数据库。当我尝试插入一行时,它失败并抛出错误

let request = new Request(`INSERT INTO [dbo].[table_name] ([Name])
                           VALUES ('test')`,
                function (err, rowCount, rows) {
                    if (err) {
                        console.log('errr--', err);
                    } else {
                        console.log(' row(s) ', rows);
                    }
                });

错误:

RequestError: Operand type clash: varchar is incompatible with varchar(8000) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'DrugstoreDB') collation_name = 'SQL_Latin1_General_CP1_CI_AS'_```

问题出在哪里?

AlwaysEncrypted 是客户端加密,因此必须由您的客户端驱动程序支持。据我所知,当前已实施 AlwaysEncrypted 的客户端库列表为:

-.NET Framework 的 SqlClient(但不是 .NET Core/.NET Standard)

-SQL 服务器的 Windows

的 Microsoft ODBC 驱动程序

-SQL 服务器的 Linux

的 Microsoft ODBC 驱动程序

-Microsoft JDBC SQL 服务器的驱动程序