2017-05-29 2 views
3

Ich habe eine Tabelle erstellt:SQL Server 2016 - Ist es möglich, zwei nvarchar immer verschlüsselte Spalten zu verketten?

create table dbo.employee(firstname nvarchar(100) null,lastname nvarchar(100) null) 

Eingefügt einige Beispieldaten:

insert into dbo.employee values('Sachin','Tendulkar') 
insert into dbo.employee values('Rohit','Sharma') 
insert into dbo.employee values('Virendra','Sehwag') 
insert into dbo.employee values('Irfan','Pathan') 

Dann habe ich immer verschlüsselt Assistenten beide Spalten dieser Tabelle mit SSMS v17 zu verschlüsseln. Und jetzt versuche ich, Vorname mit Nachnamen so verketten:

select concat(firstname, lastname) from dbo.employee 

Und es gibt mir unter Fehler:

Operand type clash: nvarchar(100) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') is incompatible with varchar

Wenn ich versuche dies:

select firstname + lastname from dbo.employee 

Es gibt folgende Fehler:

Encryption scheme mismatch for columns/variables 'firstname', 'lastname'. The encryption scheme for the columns/variables is (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') and the expression near line '1' expects it to be (encryption_type = 'PLAINTEXT') (or weaker).

Jede Hilfe wird geschätzt.

+0

erwartet sie (encryption_type = 'KLARTEXT') (oder schwächer) zu sein. Ist diese Information nicht genug? – user6144226

Antwort

3

Verkettung in verschlüsselten Spalten nicht erlaubt. Gegenwärtig ist die einzige Operation, die für verschlüsselte Spalten möglich ist, die Gleichheit. Dies liegt daran, dass SQL Server nicht über den Schlüssel verfügt.

Möglicherweise müssen Sie diese Logik in der Clientanwendung implementieren.

Von offizieller Dokumentation

Deterministic encryption always generates the same encrypted value for any given plain text value. Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. However, but may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there is a small set of possible encrypted values, such as True/False, or North/South/East/West region. Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Randomized encryption uses a method that encrypts data in a less predictable manner. Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Verwandte Themen