解密数据从SQL Server 2008 R2
本文关键字:2008 R2 Server SQL 数据 解密 | 更新日期: 2023-09-27 18:14:06
我需要一些帮助来翻译这个过程(见下文)到实体框架4.0。谁有什么建议,如何移植这个。目标项目包括:Silverlight 4, WCF RIA Services, 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());
}
请让我知道我应该如何设置这个,谢谢!
您可以通过实体框架运行查询,并通过使用ObjectContext.ExecuteStoreQuery<>()
函数获得强类型结果(参见本例)。
DECRYPTBYKEY
函数,更不用说实体框架不会生成打开键的语句了。
要在查询敏感数据之前解密,您所需要做的就是在EF ObjectContext连接中使用DbTransaction。
。
- connection.Open ();
- connection.BeginTransaction ();
- 执行您的"打开"的命令或存储过程执行您的敏感数据查询,存储程序等。
- 如果需要,提交或回滚事务
这迫使EF保持相同的db连接,因为你已经启动了一个db事务,这是有意义的,因为你可能会执行一大堆的SP作为同一个db事务的一部分。