エンティティフレームワーク/コードを最初に使用する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がサポートしていないことをやっていますか?