1

エンティティフレームワーク/コードを最初に使用するMVCアプリケーションがあります。私は列(社会保障番号/ SSN)を暗号化するために常に暗号化を設定しようとしています。私は、Azureですべてを実行しています。Azure格納庫を使用してキーを格納します。エンティティフレームワーク[コードファースト]データベースで常に暗号化を使用

SystemUserとPersonの2つのモデルがあります。 SystemUserは本質的に1人以上の人を管理できるアカウント/ログインです。私は非常に基本的なページだけでユーザーを検索し、その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:内のコードの結果を実行するコマンド定義を実行中にエラーが発生しました 。詳細については、 例外を参照してください。 ---> 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 for DataBaseを使用し、既存のデータベースからコードを最初にマイグレートし、回避策でコードを使用する方法を説明しています。

関連する問題