2016-10-28 1 views
0

SQL Server 2016에서 암호화 된 열과 암호화되지 않은 열을 사용하여 조인 작업을 수행하는 방법 .net framework 4.6.1을 사용하는 Im. 열 암호화 설정 = 연결 문자열에서 사용.Sql 2016 Always Encrypted - 암호화 및 비 암호화 열과의 결합 작업?

코드 :

cmd = new SqlCommand("select determin.name as name from determin inner join determinjoin on determin.name = determinjoin.name ", con); 

오류 :

The data types varchar(20) encrypted with (encryption_type = 
'DETERMINISTIC', encryption_algorithm_name = 
'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto4', 
column_encryption_key_database_name = 'depdb') collation_name = 
'Latin1_General_BIN2' and varchar are incompatible in the equal to operator. 
+0

이 시점에서 더 이상 질문하지 않아야합니까? "이 데이터가 암호화할만한 가치가있는 경우 일부 테이블에서만 암호화되는 이유는 무엇입니까?" –

+0

이 필요합니다. 나는 하나의 테이블에있는 암호화 된 컬럼과 다른 테이블의 암호화되지 않은 컬럼에 조인을 넣어야한다. – Karthikeyan

+1

나는 이것이 가능하지 않다고 생각한다. SQL Server에 저장된 값은 암호화됩니다. 열 암호화 설정은 데이터 페이지의 기본 값을 변경하지 않습니다. MS의 항상 암호화 된 알고리즘을 사용하여 암호화되지 않은 값을 해시해야 조인에 일치하는 두 값을 얻을 수 있습니다. – dfundako

답변

1

으로, 당신은 할 수 없습니다. 쿼리 프로세서는 조인에 대한 해독 키를 액세스 할 수 없습니다. 정말로 두 테이블을 조인해야하는 경우 결정적 암호화를 사용하여 두 열을 모두 암호화해야합니다.

그렇긴해도 여전히 원하지 않을 수도 있습니다. 성능은 몇 백만 행 이상으로 나쁜 곳에서 심해질 것입니다. 정말로해야만하고 스키마를 수정할 수있는 옵션이 없다면 테스트를 수행하여 사용자의 수행 방식을 확인한 후에도 사용자가 동일하게 느껴지는지 확인하십시오. 스키마를 조금만 조정할 수 있다면이를 쉽게 할 수있는 옵션이 있습니다. 예를 들어, 이러한 조인에 대해 일부 대체 열을 사용합니다. 대용 키 또는 보안에 민감하지 않은 자연스러운 키일 수 있습니다.