Ich versuche, die Always Encrypt-Funktion von SQL Server 2016 zu praktizieren. Ich verwende eine vorhandene Anwendung und Datenbank dafür.Aktualisieren/Einfügen von Zeilen in SQL-Tabelle mit verschlüsselten Spalten mit LinqToSQL - Immer verschlüsseln
Ich habe eine Tabelle [Benutzer], wo ich die 'Passwort' Spalte mit 'deterministischen' Typ verschlüsselt habe. Ich habe die Verbindungszeichenfolge geändert und kann alle Zeilen abrufen. Ich habe das Repository für diese Tabelle erstellt.
Ich versuche, Zeilen in dieser Tabelle mit LinqToSQL mit InsertOnSubmit() und SubmitChanges() einzufügen und zu aktualisieren.
Aber wenn ich versuche, neue Zeilen einfügen oder bestehende Zeilen aktualisieren, erhalte ich die Fehlermeldung:
Msg 206, Level 16, State 2, Line 7 Operand type clash: varchar is incompatible with varchar(20) 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 = 'BRO_UAT') collation_name = 'Latin1_General_BIN2'
I Artikel gelesen haben, wo gespeicherte Prozeduren verwenden und Parametrisierung das Problem gelöst hat. Aber, wie ich bereits erwähnt habe, ist dies ein bestehendes Projekt, und ich habe LinqToSql verwendet und möchte den Code nicht ändern. Einfügen/Aktualisieren funktioniert einwandfrei, wenn die Spalte nicht verschlüsselt ist!
Fehle ich etwas Einstellung? Bitte zeigen Sie mir in die richtige Richtung.
Dank Mukhesh. Dies scheint für einige meiner Tests in Ordnung zu sein, ich werde einen Coup von Szenarien prüfen und Ihre Antwort akzeptieren. Vielen Dank für deine Hilfe. Dieses einfache Problem brachte mich dazu, meine Haare zu ziehen! – AnkitMittal
Der Fehler varchar ist nicht kompatibel mit varchar (20) gibt auch einen Fall an, wenn die Größe Ihrer Spalte kleiner ist als der konvertierte Schlüssel, der generiert wird, und deshalb können Sie ihn nicht speichern. Sie können auch versuchen, die Größe der Spalte in der Datenbank zu erhöhen. –
Das ist genau was ich getan habe. Ich habe die Größe auf Varchar (8000) erhöht und es hat funktioniert. – AnkitMittal