0

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

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 尚未打开密钥)。

一些提示?

4

2 回答 2

1

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

IE

  1. 连接.打开();
  2. 连接.BeginTransaction();
  3. 使用 ExecuteStoreCommand 执行您的“OPEN SYMMETRIC KEY...”命令或存储过程
  4. 执行您的敏感数据查询、存储过程等。
  5. 如果需要,提交或回滚您的事务

这会强制 EF 保持相同的数据库连接,因为您已经启动了一个数据库事务,这很有意义,因为您可能会执行一大堆 SP 作为同一个数据库事务的一部分。

试试看。这个对我有用。

蒂亚戈

于 2014-06-19T23:23:31.050 回答
1

似乎 EF 不能那样工作。需要在一个命令上返回带有打开证书的结果。

于 2013-01-28T09:51:27.480 回答