使用始终与实体框架和Azure的主要跳马
问题描述:
我已经加密了一些列的Azure的SQL数据库,使用Always Encrypted并存储在Azure中的关键库列主密钥加密的,但我无法从我的应用程序访问它们使用实体框架。使用始终与实体框架和Azure的主要跳马
有一个最近MSDN article和older blog post解释如何设置为使用始终与Azure的主要跳马加密一个SqlConnection,所以我猜,一个正常的DbContext可以使用接受DbConnection
的constructor创建。
的问题是,我使用的是IdentityDbContext
,其不具有构造 - 唯一constructor,需要一个DbConnection
也需要DbCompiledModel
,这已超出目前我的工资档次。
谁能解释如何建立一个IdentityDbContext
使用密钥库?
答
看来,EF队有test that uses encryption。
var connectionStringBuilder = new SqlConnectionStringBuilder(SqlServerTestStore.CreateConnectionString("adventureworks"))
{
Encrypt = encryptionEnabled
};
var options = new DbContextOptionsBuilder();
options.UseSqlServer(connectionStringBuilder.ConnectionString);
using (var context = new AdventureWorksContext(options.Options))
{
context.Database.OpenConnection();
Assert.Equal(ConnectionState.Open, context.Database.GetDbConnection().State);
}
TODO:test IdentityDbContext构造函数公开与AdventureWorksContext相同的构造函数。
我调查发现...加入一提“列加密设置=已启用”,在ConnectionString中,需要添加的SqlParameter用于加密列。这里:https://azure.microsoft.com/en-us/documentation/articles/sql-database-always-encrypted/#strongimportantstrong你是在加密一列还是整个数据库? – OzBob