Расшифровать данные из SQL Server 2008 R2 - PullRequest
3 голосов
/ 09 ноября 2011

Мне нужна помощь в переводе этой процедуры (см. Ниже) на 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());
    }

Пожалуйста, дайте мне знать, как мне это настроить, и спасибо!

Ответы [ 2 ]

1 голос
/ 16 марта 2013

Вы можете выполнить запрос через Entity Framework и получить строго типизированные результаты, используя функцию ObjectContext.ExecuteStoreQuery<>() (см. этот пример ).

К сожалению,однако, я не думаю, что есть какой-то способ обойтись без необходимости самостоятельно генерировать оператор T-SQL.Хотя вы можете использовать многие функции SQL Server в запросах Linq-to-Entities через класс SqlFuntions , нет функции, которая транслирует функцию DECRYPTBYKEY SQL Server, не говоря уже о том, что Entity Framework выигралане сгенерировать оператор для открытия ключа.

0 голосов
/ 20 июня 2014

Чтобы расшифровать перед запросом конфиденциальных данных, все, что вам нужно сделать, это использовать DbTransaction в соединении EF ObjectContext.

Т.е.

  • connection.Open ();
  • connection.BeginTransaction ();
  • выполнить команду «OPEN SYMMETRIC KEY ...» или хранимую процедуру с помощью ExecuteStoreCommand, выполнить запросы к конфиденциальным данным, хранимые процедуры и т. Д.
  • Подтвердить илиОткатите вашу транзакцию, если требуется

Это вынуждает EF поддерживать то же самое соединение с БД, потому что вы запустили транзакцию БД, и это имеет смысл, потому что вы можете выполнить целую кучу SP как часть одной и той же транзакции БД..

...