CEK密钥不可用,并且在删除之前创建的本地数据库时,迁移将不适用当我运行我的应用程序时
问题描述:
我通过下面的链接在我的应用程序中实现了始终加密的概念和实体框架。CEK密钥不可用,并且在删除之前创建的本地数据库时,迁移将不适用当我运行我的应用程序时
这是我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()迁移代码。但我不希望这种情况。
问候,
普拉迪普
答
请参阅的Code First - 的this article迁移部分,你需要创建数据库列主密钥,列加密密钥,模式等实体框架之外(例如,通过使用SQL服务器管理工作室)。有关这方面的更多信息here
谢谢,我在这个博客中包含了Up()移植代码,如果CEK密钥已经存在,它会在我们加密指定列时起作用,否则它会给出异常。我正在使用SSMS中的本地数据库。 – pradeep
是的,如果CEK不存在,它应该给你一个例外。在执行Up()方法之前,您需要配置CEK –