簡體   English   中英

帶有 Sql Server 列級加密的實體框架

[英]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);

在 SQL Server 2012 中,列級加密主要可以通過兩種方式完成,即,

  1. 在實體框架中定義自定義加密函數 這個博客
  2. SQL 單元級加密實現在 dbcontext 類中的實體框架中完成(在此處執行開放對稱密鑰代碼),使用此博客並使用存儲過程(其中包含表中指定字段的解密代碼)檢索結果集。

在SQL服務器二零一六年,是新的功能,即,始終是加密的,並有其在實體框架實現這里

我知道它有點舊,但是如果您使用的是 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_SocialSecurityNumberSecure_是關鍵部分),CipherDb 會自動執行數據加密、篡改保護、安全密鑰存儲、安全密鑰分發、緩存、密鑰翻轉, ACL 等。 您還可以使用 Crypteron 來保護流、文件、對象、消息隊列、noSQL 等。

您可以在 GitHub 上找到示例應用程序,網址https://github.com/crypteron/crypteron-sample-apps

免責聲明:我在那里工作,我們有一個免費的社區版,任何人都可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM