2014-10-16 1 views
0

"테이블에 책이 있습니다."라는 문장에서 "book"이라는 단어를 검색하려고한다고 가정합니다. 문장을 암호화 된 형식으로 저장해야합니다. 독립 실행 형 SQL Server에서는 SQL Server에 키가있는 대칭 키 암호화를 사용할 수 있으며 암호화 된 열 내의 구문 검색을 검색하고 일치하는 행만 반환 할 수 있습니다. 하지만 대칭 키를 지원하지 않는 SQL Azure를 사용하고 싶습니다. 어떻게해야합니까? 더 긴 암호화 된 varchar 문자열 내에서 구문을 찾으려면 어떤 해결 방법을 사용할 수 있습니까?SQL Azure의 암호화 된 열에서 검색 할 수있는 방법이 있습니까?

전체 문장을 검색하는 대신 C#의 응용 프로그램 수준에서 쉽게 암호/암호 해독을 수행 할 수 있습니다. C#에서 전체 문장을 암호화 할 수 있는데, "1234567890"을 반환하고 SQL Server에 암호화 된 문자열의 완벽한 일치를 요청할 수 있습니다. 그것은 열의 전체 가치를 찾는 데 효과적입니다. 문제는 전체 문자열 (단어 "book")의 일부만 검색해야한다는 것입니다. C#에서 "book"을 암호화하면 암호화 알고리즘이 "asdf"를 반환한다고 가정합니다. 전체 문장을 암호화하고 알고리즘이 "1234567890"을 반환하면 내 하위 문자열 "asdf"를 찾을 수 없습니다. SQL에서 "asdf"와 같은 문자열을 찾도록 요청하면 전체 암호화 된 문자열에서 해당 문자열을 찾을 수 없습니다. 여기서 암호화 된 "book"이 "3456"이되는 부분 암호화가 항상있는 암호화 알고리즘을 찾을 수 있습니다. "1234567890"이되는 전체 문장 내에서).

정말 SQL Azure를 사용하고 싶지만 암호화 된 더 큰 문자열 내에서 문자열 LIKE 일치를 검색 할 방법이 필요합니다. 도움이된다면 CLR 스토어드 프로 시저를 사용하는 데 열어도되지만 확실하지는 않습니다. 어떤 제안?

답변

0

이 작업을 수행 할 수있는 유일한 방법은 문장을 해독 한 다음 해독 된 문장에서 단어를 검색하는 것입니다.

문장을 해독하지 않으려면 "색인"테이블을 만들고 원본 문장이 암호화 될 때 색인 생성 가능한 단어를 검색하여이 단어를 색인 테이블에 추가하십시오 당신의 문장을 보유하고있는 테이블에 외래 키가 있습니다. 그런 다음 단어를 검색해야하는 경우 해당 단어를 색인 표와 일치시킵니다. icemanmind의 아이디어에서

+0

답장을 보내 주셔서 감사합니다. 문제는 내가 1,000,000 개의 레코드가 있고 그 중 4 개의 레코드에만 "book"이라는 단어가 포함되어 있으면 해독을 위해 백만 건의 레코드를 모두 가져올 수 없다는 것입니다. 나는 서버 끝에서 T-SQL로부터 정기적 인 빠른 레코드 필터링을 필요로한다. 들어오는 모든 단락의 모든 단어를 데이터베이스에 색인화하는 것을 정말 싫어한다는 점을 제외하면 색인 아이디어는 흥미 롭습니다. 텍스트 하나 단락이나 단락을 삽입하는 대신 앱과 데이터베이스에서 꽤 부담스러워 보입니다. – stackonfire

0

약간의 변화 :

당신은 루씬 같은 색인 패턴을 사용하고, 필요 테이블의 기록에서 메모리에 색인을 만들 수 먼저 암호를 해독 할 수 있습니다 : https://code.msdn.microsoft.com/windowsazure/Azure-Library-for-83562538

는 다른,로 그것은 별도의 테이블에서 인덱싱과 관련이 있으며, 문장의 개별 단어의 해시 값을 인덱싱하고 해시를 인덱스로 사용하는 것입니다. 중요하다면 단어를 안전하게 유지하는 이점이 있습니다.

관련 문제