0

我通过以下链接在我的应用程序中使用实体框架实现了始终加密概念。

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

这是我当前应用程序的 migrations 文件夹下的 initialSchema.cs 文件中的 Up() 迁移方法。

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");

然后在 Package Manger Console 中运行Update-Database命令。

仅当 CEK 密钥已可用于加密列时,上述代码才有效。但是当我在删除现有的本地数据库后再次运行我的应用程序时,它会给出异常,例如 CEK 密钥不可用并且也没有应用迁移。

添加 ALTER SQL 语句并删除本地数据库后,如何解决上述问题?

上述问题只解决了,再次更改了 Up() 迁移代码,但我不想要那种情况。

4

1 回答 1

0

请参阅本文的代码优先 - 迁移部分,您需要在实体框架之外创建数据库列主密钥、列加密密钥、架构等(例如使用 SQL Server Management Studio)。可以在此处找到有关此的更多信息

于 2017-02-03T18:34:50.180 回答