-
Notifications
You must be signed in to change notification settings - Fork 42
Closed
Description
The process reads from encrypted columns without issue, the ODBC 17 driver takes care of the decryption. But I can't insert into the table for the life of me. Below is a simple example that should work but it never does. It always converts my input parameters to an invalid type too long, too short, wrong type, and the encryption fails.
FWIW: Inserting from SSMS and EntityFrameworkCore works just fine.
Table
CREATE TABLE [dbo].[enc_test](
[id] [int] IDENTITY(1,1) NOT NULL,
[a] [varchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [???], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[b] [nvarchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [???], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[c] [datetime2](7) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [???], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
) ON [PRIMARY]
GO
Stored Procedure
-- Columns a, b and c are encrypted using deterministic encryption
create procedure [dbo].[__test_enc]
@a varchar(50),
@b nvarchar(50),
@c datetime2 = null
as
begin
declare @ae_a varchar(50) = @a
declare @ae_b nvarchar(50) = @b
declare @ae_c datetime2 = @c
insert into [dbo].[enc_test] (a, b, c)
output inserted.*
values (@ae_a, @ae_b, @ae_c)
end
Node.js
const msnodesqlv8 = require('msnodesqlv8');
msnodesqlv8.open(dsnString, (err, conn, output) => {
if (err) return console.log(err);
let pm = conn.procedureMgr();
pm.get('[dbo].[__test_enc]', proc => {
proc.call(['T', 'T', '2022-01-01'], (err, results, output)=>{
console.log({err, results, output});
})
})
})
Error
[Error: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Operand type clash: nvarchar(2) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = '???', column_encryption_key_database_name = 'table') is incompatible with varchar(50) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = '???', column_encryption_key_database_name = 'table') collation_name = 'SQL_Latin1_General_CP1_CI_AS'] {
sqlstate: '22018',
code: 206,
severity: 16,
serverName: 'SERVER\\DEV',
procName: 'dbo.__test_enc',
lineNumber: 0
}
Metadata
Metadata
Assignees
Labels
No labels