[英]Entity Framework with Sql Server Column Level Encryption
我需要加密多個數據庫列(在 Sql Server 2012 中)。 已經決定我們應該使用列級加密(在 sql server 中實現)。 在應用程序方面,我將在一些復雜的域模型之上構建一個 web api。 我真的很想利用實體框架的代碼優先方法來維護一個干凈的域模型)。 有沒有人在這里有一個不涉及使用存儲過程的可行解決方案? 理想情況下,我想以某種方式操縱實體框架生成的 sql 來包裝某些字段來執行 sql 加密/解密功能。
理想情況下,類似於:
modelBuilder.Entity<MyTable>().ToTable("Table1").Property(p => p.SensativeData).encrypt("keyName",authenticatorFunc);
我知道它有點舊,但是如果您使用的是 Entity Framework Core,我開發了一個 Entity Framework Core 插件,該插件使用自定義屬性處理string
字段的數據加密。 實際上只有 AES 加密提供程序可用,但您可以輕松實現新的加密提供程序。 在這里查看: https : //github.com/Eastrall/EntityFrameworkCore.DataEncryption
它與 EF Core 2 和 3 兼容。
快速示例:
public class UserEntity
{
public int Id { get; set; }
[Encrypted]
public string Username { get; set; }
[Encrypted]
public string Password { get; set; }
public int Age { get; set; }
}
public class DatabaseContext : DbContext
{
// Get key and IV from a Base64String or any other ways.
// You can generate a key and IV using "AesProvider.GenerateKey()"
private readonly byte[] _encryptionKey = ...;
private readonly byte[] _encryptionIV = ...;
private readonly IEncryptionProvider _provider;
public DbSet<UserEntity> Users { get; set; }
public DatabaseContext(DbContextOptions options)
: base(options)
{
this._provider = new AesProvider(this._encryptionKey, this._encryptionIV);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseEncryption(this._provider);
}
}
Crypteron有一個免費的實體框架適配器CipherDb ,它可以與任何 SQL Server 一起使用。 事實上,Crypteron CipherDb 適用於任何兼容實體框架的數據庫 - 甚至 MySQL、PostGreSQL 等。
您可以使用[Secure]
注釋數據模型或將屬性命名為Secure_SocialSecurityNumber
( Secure_
是關鍵部分),CipherDb 會自動執行數據加密、篡改保護、安全密鑰存儲、安全密鑰分發、緩存、密鑰翻轉, ACL 等。 您還可以使用 Crypteron 來保護流、文件、對象、消息隊列、noSQL 等。
您可以在 GitHub 上找到示例應用程序,網址為https://github.com/crypteron/crypteron-sample-apps
免責聲明:我在那里工作,我們有一個免費的社區版,任何人都可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.