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

本文关键字:证书 框架 实体 | 更新日期: 2023-09-27 17:55:15

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

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

一些提示?

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

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

若要在查询敏感数据之前进行解密,只需在 EF ObjectContext 连接中使用 DbTransaction。

  1. 连接。打开();
  2. 连接。开始交易();
  3. 执行您的"打开对称密钥..."命令或存储过程与 ExecuteStoreCommand
  4. 执行敏感数据查询、存储过程等。
  5. 如果需要,提交或回滚事务

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

试试看。它对我有用。

蒂亚戈