【问题标题】:Decrypt Data From SQL Server 2008 R2从 SQL Server 2008 R2 解密数据
【发布时间】:2011-11-08 23:17:52
【问题描述】:

我需要一些帮助来将此过程(见下文)转换为 Entity Framework 4.0。有没有人对如何移植这个有任何建议。 目标项目包括; Silverlight 4、WCF RIA 服务、EF 4.0、SQL Server 2008 R2。

我唯一的要求是它需要放在托管代码中,而不是存储过程中。

    Try 
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        string sql = "OPEN SYMMETRIC KEY " + this._encryptKey;
        sql += " DECRYPTION BY CERTIFICATE " + this._encrpytCert; 
        sql += " SELECT TOP (1) CONVERT(nvarchar(50),DECRYPTBYKEY(Field1)) AS Name";
        sql += " FROM Table3"; 
        sql += " ORDER BY CONVERT(nvarchar(50),DECRYPTBYKEY(Field1))";
        cmd.CommandText = sql;
        Name = (String)cmd.ExecuteScalar();
        bRtn = false;
    }
        catch (Exception ex)
    {
        System.Diagnostics.Debug.Print(ex.ToString());
    }

请告诉我应该如何设置,谢谢!

【问题讨论】:

  • 哦,对不起。我不知道我在喊。我是新来的。如果你告诉我,我是怎么喊的,我会小心不要再这样做了。谢谢!
  • 标题中的所有大写字母 - 我为您编辑了它。除了我不确定你为什么可以使用存储过程之外,我对你的答案没有任何好的建议。
  • 好的,谢谢。下次我会在主题中使用适当的大小写。至于sprocs的使用;出于额外的安全原因,我们希望将访问数据表的代码保留在数据库之外,以便如果数据库被未经授权的人审查,他们将不知道使用哪些表和键来提供数据。没有办法通过审查存储过程来“映射回来”。再次感谢您的帮助。
  • 尝试查看codingheadache.com/?tag=entity-framework。希望对您有所帮助。
  • 您好,感谢您的回复。该链接当然有很多重要信息,但缺少的是如何翻译/复制命令文本; cmd.CommandType = CommandType.Text; string sql = "打开对称密钥" + this._encryptKey; sql += " 证书解密 " + this._encrpytCert;我找不到有人在处理解密密钥的域服务类中编写 T-SQL 代码的示例,如上所示。如果您看过任何演示如何实现这样的代码的示例,请告诉我。谢谢! 〜戴夫

标签: c# silverlight-4.0 entity-framework-4 sql-server-2008-r2 encryption-symmetric


【解决方案1】:

您可以通过实体框架运行查询并使用ObjectContext.ExecuteStoreQuery<>() 函数获得强类型结果(请参阅this example)。

但是,不幸的是,我认为没有任何方法可以避免必须自己生成 T-SQL 语句。虽然您可以通过 SqlFuntions 类在 Linq-to-Entities 查询中使用 SQL Server 的许多函数,但没有任何函数可以转换 SQL Server 的 DECRYPTBYKEY 函数,更不用说实体框架不会生成声明打开密钥。

【讨论】:

    【解决方案2】:

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

    • connection.Open();
    • connection.BeginTransaction();
    • 执行您的“打开 SYMMETRIC KEY..." 命令或存储过程 ExecuteStoreCommand 执行您的敏感数据查询,存储 手续等
    • 如果需要,提交或回滚您的事务

    这会强制 EF 保持相同的数据库连接,因为您已经启动了一个数据库事务,这是有道理的,因为您可能会在同一个数据库事务中执行一大堆 SP。

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      相关资源
      最近更新 更多