엔티티 프레임 워크/코드를 먼저 사용하는 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가 지원하지 않는 것을하고 있습니까?