EF4에서 암호화 된 열을 구현하고 CTP5 기능을 사용하여 POCO를 사용하여 데이터베이스를 쿼리 할 수 있습니다. 죄송합니다. 많은 말입니다.하지만 아래에서 희망과 문제점을 설명 할 수 있기를 바랍니다.LINQ to Entities 쿼리에서 쿼리 가로 채기를 구현하려면 어떻게해야합니까? (C#)
그래서, 배경의 비트, 그리고 지금까지 내 진행 :
의도는 당신이 우리의 DAL를 사용하지 않고 테이블을 조회하면 다음 데이터는 쓰레기입니다,하지만 난 개발자들이 걱정하고 싶지 않아 데이터가 암호화되는 경우/때/방법.
이 단계에서는 모든 문자열 열이 암호화된다는 가정하에 작업하고 있습니다.
이제 Objectmaterialized 이벤트를 사용하여 데이터를 반환하고 SavingChanges 이벤트를 사용하여 데이터를 커밋하는 데 성공적으로 구현했습니다. 거기에
public class Thing
{
public int ID { get; set; }
[Required]
public string Name { get; set; }
public DateTime Date { get; set; }
public string OtherString { get; set; }
}
아래 쿼리가 필요한 모든 값을 반환하고 POCO이 구체화이 데이터 삭제 :
그래서 다음 클래스를 부여. myDbContext.Things가다음 호출 (이름 및/또는 OtherString 값을 클리어 문자열 데이터)
Things.Add()
에
Thing
인스턴스를 전달 마찬가지로 DbSet<Thing>
이다
var things = from t in myDbContext.Things
select t;
myDbContext.SaveChanges()
은 문자열이 데이터 저장소에 도착하기 전에 암호화합니다.
지금 내가 가지고있는 문제는이 쿼리에 있습니다
var things = from t in myDbContext.Things
where t.Name == "Hairbrush"
select t;
이 암호화되지 않은 값 결과는 DB에 암호화 된 값과 비교된다. 분명히 데이터베이스에서 모든 레코드를 가져 와서 구체화하고 제공된 Where 절을 기반으로 결과를 필터링하지 않으려 고합니다. 그래서 내가해야 할 일은 다음과 같습니다. 쿼리를 가로 채어 임의로 암호화하여 다시 작성합니다. Where 절의 문자열 그래서 내가 검토 한 :
- 쿼리 공급자 작성,하지만 적합한 솔루션은 아닌 것 같아 ... (이것은 무엇입니까?)에 대한 내 자신에 IQueryable 래퍼를 작성
- 표현식을 캡처 할 DbSet은 표현식 트리 방문자를 사용하여 실행 한 다음 새 표현식을 DbSet으로 전달합니다. ...
두 가지 모두 시도가 다소 실종되었습니다! 나는 조금 더 깔끔하게 느껴졌고 앞으로는 다른 개발자들에게 더 분명해질 것이라고 생각하는 두 번째 해결책을 선호한다. 그러나 나는 더 좋은 옵션과 함께 가면 행복하다 !!
내가 고민하는 주요한 것은/LINQ식이 개체에 적용될 때입니다 ... 나는 내가 표현식이 IQueryable 개체에서 실행되는 위치에 대해 혼란스러워했습니다. 내 래퍼에서 어떤 식으로 구현할 필요가 있는지 확실하지 않아 전달되는 식을 잡아서 조작해야합니다.
나는 여기에서 꽤 명백한 무엇인가 놓치고있다라고 확신한다. 그리고 나는 그 전구를 기다리고있다. .. 그러나 그 오지 않는다!!
도움을 주시면 매우 감사하겠습니다!
SQL Server 2008과 투명 데이터 암호화는 어떻게 사용합니까? –