实体框架无法正确打开证书

时间:2013-01-23 11:51:46

标签: c# sql-server entity-framework aes

我有一个打开证书的程序,基本上是:

CREATE PROCEDURE [dbo].[SP_OPENCCKEY] WITH EXECUTE AS OWNER AS  
   OPEN SYMMETRIC KEY CCKEY
        DECRYPTION BY CERTIFICATE CERTCC;

不,我不想让我的用户直接打开它。

所以,我试图返回一个使用该证书来解密某些信用卡数据的视图,我只是这样做:

public List<VW_CREDITCARDS> ListCreditCardByPersonID(int PersonId)
        {
            EntityMgr ent = new EntityMgr ();
            ent.ExecuteFunction("SP_OPENCCKEY");
            return ent.VW_CREDITCARDS.Where(p => p.PES_IDPERSON== PersonId).ToList();
        }

由于某种原因,结果返回NULL(可能是因为EF没有打开密钥)。

一些提示?

2 个答案:

答案 0 :(得分:1)

似乎EF就是这样不起作用。需要使用打开的证书在单个命令上返回结果。

答案 1 :(得分:1)

要在查询敏感数据之前解密,您需要做的就是在EF ObjectContext连接中使用DbTransaction。

即。

  1. connection.Open();
  2. connection.BeginTransaction();
  3. 使用ExecuteStoreCommand执行“OPEN SYMMETRIC KEY ...”命令或存储过程
  4. 执行您的敏感数据查询,存储过程等。
  5. 如果需要,提交或回滚您的交易
  6. 这会强制EF维护相同的数据库连接,因为您已经启动了数据库事务,这是有意义的,因为您可能会执行一大堆SP作为同一数据库事务的一部分。

    试试吧。它对我有用。

    Thyago