0

我通過下面的鏈接在我的應用程序中實現了始終加密的概念和實體框架。CEK密鑰不可用,並且在刪除之前創建的本地數據庫時,遷移將不適用當我運行我的應用程序時

https://blogs.msdn.microsoft.com/sqlsecurity/2015/08/27/using-always-encrypted-with-entity-framework-6/

這是我initialSchema.cs向上()方法的遷移文件,我的當前應用程序的遷移文件夾下。

public override void Up() 
    { 
     CreateTable(
      "dbo.PersonalInfoTables", 
      c => new 
       { 
        ID = c.Int(nullable: false, identity: true), 
        Firstname= c.String(), 
        LastName= c.String(), 
        Address= c.String(), 
        SSN = c.String(), 
       }) 
      .PrimaryKey(t => t.ID); 

    } 

之後,我評論了SSN字段,並添加了下面的SQL語句來加密SSN列。

//manually add the encrypted columns 
     Sql("ALTER TABLE [dbo].[PersonalInfoTables] ADD [SSN] [nvarchar](11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH(ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256', COLUMN_ENCRYPTION_KEY = CEK_Auto1) NOT NULL"); 

然後運行程序包管理器控制檯更新,數據庫命令。

僅當CEK密鑰已經可用於加密列時,上述代碼纔可用。但是當我在刪除現有本地數據庫後再次運行我的應用程序時,它會提供像CEK密鑰不可用的異常,也不適用遷移。

您可以告訴我如何解決上述問題,添加ALTER SQL語句並刪除本地數據庫後?

上述問題只解決了,再次更改了Up()遷移代碼。但我不希望這種情況。

問候,

普拉迪普

回答

0

請參閱的Code First - 的this article遷移部分,你需要創建數據庫列主密鑰,列加密密鑰,模式等實體框架之外(例如,通過使用SQL服務器管理工​​作室)。有關這方面的更多信息here

+0

謝謝,我在這個博客中包含了Up()移植代碼,如果CEK密鑰已經存在,它會在我們加密指定列時起作用,否則它會給出異常。我正在使用SSMS中的本地數據庫。 – pradeep

+1

是的,如果CEK不存在,它應該給你一個例外。在執行Up()方法之前,您需要配置CEK –

相關問題