簡體   English   中英

從SQL Server 2008 R2解密數據

[英]Decrypt Data From SQL Server 2008 R2

我需要一些幫助將此過程(見下文)轉換為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());
    }

請讓我知道如何設置它並謝謝!

您可以通過Entity Framework運行查詢,並使用ObjectContext.ExecuteStoreQuery<>()函數獲取強類型結果(請參閱此示例 )。

然而不幸的是,我認為沒有辦法讓你自己生成T-SQL語句。 雖然您可以通過SqlFuntions類在Linq-to-Entities查詢中使用許多SQL Server的函數,但是沒有函數可以轉換SQL Server的DECRYPTBYKEY函數,更不用說實體框架不會生成一個語句來打開鍵。

要在查詢敏感數據之前解密,您需要做的就是在EF ObjectContext連接中使用DbTransaction。

  • connection.Open();
  • connection.BeginTransaction();
  • 使用ExecuteStoreCommand執行“OPEN SYMMETRIC KEY ...”命令或存儲過程,執行敏感數據查詢,存儲過程等。
  • 如果需要,提交或回滾您的事務

這會強制EF維護相同的數據庫連接,因為您已經啟動了數據庫事務,這是有意義的,因為您可能會執行一大堆SP作為同一數據庫事務的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM