में एसक्यूएल एन्क्रिप्टेड कॉलम मैं सममित कुंजी का उपयोग कर SQL कॉलम स्तर एन्क्रिप्शन लागू करने के लिए देख रहा हूं। डाटाबेस मास्टर कुंजी, सर्टिफिकेट्स और सममित कुंजी बनाने के लिए आवश्यक प्रारंभिक चरण सीधे आगे दिखते हैं और मैंने सफलतापूर्वक सममित कुंजी का उपयोग करके डेटा एन्क्रिप्ट/डिक्रिप्ट करने का परीक्षण किया है।WHERE क्लॉज
हालांकि, डेटा एन्क्रिप्टेड होने के बाद, मुझे नहीं पता कि इसे कैसे पूछना सर्वोत्तम है। जैसे
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE CONVERT(varchar, DECRYPTBYKEY(EncyptedColumn)) = @SearchTerm
निश्चित रूप से एक पूर्ण तालिका स्कैन में परिणाम देगा?
एक और विकल्प जो मैंने सोचा था कि काम कर सकता है पहले खोज मानदंड को एन्क्रिप्ट करना है उदा।
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE EncyptedColumn = ENCRYPTBYKEY(KEY_GUID('KeyName'), @SearchTerm)
लेकिन यह काम नहीं करता है क्योंकि एन्क्रिप्टेड मान हमेशा उत्पन्न होता है।
किसी भी सुझाव की सराहना की जाएगी।
बीटीडब्ल्यू, एक चीज जो आप बिल्कुल ** ** नहीं करते हैं, हैश को एक पंक्ति विशिष्ट मूल्य (पीके) के साथ नमक को नमक करना है: आप वास्तव में स्क्वायर 1 पर वापस आ जाएंगे, यह जानने के लिए कि क्या खोजना है। इस परिदृश्य के लिए आप * साइट ग्लोबल * वैल्यू के साथ हैश को नमक कर सकते हैं। इंद्रधनुष टेबल हमलों को रोकने के लिए यह पर्याप्त है, लेकिन डेटा को खोजने योग्य रखता है। ध्यान दें कि समान सामग्री वाले दो अलग-अलग पंक्तियों में * एक ही हैश है, इसलिए आप कुछ जानकारी उजागर कर रहे हैं, लेकिन यह डेटा खोजने योग्य होने की परिभाषा है। –
"हालांकि ध्यान दें कि समान सामग्री वाले दो अलग-अलग पंक्तियों में एक ही हैश होगा" - यह हैशिंग का उपयोग करने के साथ मेरी मुख्य चिंता थी क्योंकि यह सुरक्षा के स्तर को कम कर देता है, हालांकि जिस तालिका में मैं काम कर रहा हूं, उसके पास 4 से 5 एन्क्रिप्टेड कॉलम होंगे और यदि मैं केवल उनमें से एक के लिए एक संबंधित हैश कॉलम जोड़ता हूं, तो यह स्वीकार्य हो सकता है। –
ध्यान दें कि तालिका में हैश टकराव जन्मदिन-हमले (मिल-इन-द-बीच) के अधीन है, इसलिए अंतर्ज्ञान से काफी अधिक है। अभी भी SHA1 में 20 बाइट्स पर एक बहुत बड़ी पता स्थान है। –