1

엔티티 프레임 워크/코드를 먼저 사용하는 MVC 응용 프로그램이 있습니다. 열 (사회 보장 번호/SSN)을 암호화하기 위해 항상 암호화를 설정하려고합니다. Azure에서 모든 것을 실행 중이며 Azure 저장소를 사용하여 키를 저장합니다.항상 엔티티 프레임 워크 [코드 첫 번째] 데이터베이스에서 암호화 된 사용

두 가지 모델 SystemUser 및 Person이 있습니다. SystemUser는 본질적으로 하나 이상의 People을 관리 할 수있는 계정/로그인입니다. 나는 아주 기본적인 페이지는 단지 사용자를 검색하고 자신의 사회 보장 번호 (SSN)를 출력한다는 설정이

public class Person 
{ 
     [StringLength(30)] 
     [Column(TypeName = "varchar")] 
     public string SSN { get; set; } // Social Security Number 
     ... 
     [Required, MaxLength(128)] 
     public string SystemUserID { get; set; } 
     [ForeignKey("SystemUserID")] 
     public virtual SystemUser SystemUser { get; set; } 
     ... 
} 

public class SystemUser 
{ 
     ... 
     [ForeignKey("SystemUserID")] 
     public virtual HashSet<Person> People { get; set; } 
     ... 
} 

:

정의는 조금처럼 보인다. 이 작동합니다. 그런 다음 SSN을 업데이트하기 위해이 페이지를 수정했으며 이것도 작동합니다. 이 말은 항상 암호화 된 구성과 Azure Vault가 올바르게 설정되었음을 의미합니다. 연결 문자열에 "열 암호화 설정 = 사용 가능"이 있고 SSMS를 사용하여 SSN 열을 암호화했습니다 (결정 성을 사용하고 있습니다).

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<SystemUser> manager) 
{ 
     ... 
     if (this.People.Any()) 
     { 
       ... 
     } 
     ... 
} 

이것은 사용자 로그인에 사용되는 : 내 SystemUser 클래스에서

나는 정체성의 구현으로 다음과 같은 방법이있다.

System.Data.Entity.Core.EntityCommandExecutionException : A의 결과 코드를 실행하는 명령 정의 실행 중 오류가 발생 . 자세한 내용은 내부 예외를 참조하십시오. ---> System.Data.SqlClient.SqlException : 피연산자 타입 충돌 : VARCHAR VARCHAR가 호환되지 않는 (30) (= encryption_type을 'DETERMINISTIC'encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256'column_encryption_key_name = 'CEK_Auto11'와 를 암호화 column_encryption_key_database_name = 'XXX') collation_name = 'Latin1_General_BIN2'

"만약 (this.People.Any())"위의 줄에 실패 할 것으로 보인다. 그냥 라인 전에 브레이크 포인트를 두는 것은 this.People에 대해 다음과 같은 계시 :

'((System.Data.Entity.DynamicProxies.SystemUser_9F939A0933F4A8A3724213CF7A287258E76B1C6775B69BD1823C0D0DB6A88360)이) .People' 유형 '시스템의 예외가 발생했습니다. Data.Entity.Core.EntityCommandExecutionException 'System.Collections.Generic.HashSet {System.Data.Entity.Core.EntityCommandExecutionException} 여기

어떤 아이디어? Always Encrypted가 지원하지 않는 것을하고 있습니까?

답변

1

항상 암호화는 엔티티 프레임 워크에서 지원되지 않습니다. MS가 아직 작동 중입니다.

0

이 블로그 Using Always Encrypted with Entity Framework 6은 다른 시나리오 및 문제에 대해 항상 데이터베이스 기반 Entity Framework 6 및 기존 데이터베이스에서 코드 첫 번째 마이그레이션에서 해결 방법을 사용하는 방법을 설명합니다.

관련 문제