5

में एन्क्रिप्टेड तत्वों पर वाइल्डकार्ड खोज कैसे कर सकता हूं, मैं अपने कुछ मॉडल फ़ील्ड को एन्क्रिप्ट करने के लिए attr_encrypted का उपयोग कर रहा हूं, और मैं पूरी टेक्स्ट खोज के लिए टायर का उपयोग Elasticsearch के साथ करता हूं। मैं सिर्फ एक साधारण खोज फ़ॉर्म का उपयोग करता हूं।मैं डेटाबेस

class Student < ActiveRecord::Base 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    attr_accessible :name, :surname 
    attr_encrypted :name,    :key => 'f98gd9regre9gr9gre9gerh' 
    attr_encrypted :surname,   :key => 'f98gd9regre9gr9gre9gerh' 

    def self.search(params) 
    tire.search(load: true) do 
     query { string Student.encrypt_name(params[:search]) } if params[:search].present? 
    end 
    end 
end 

तो, उदाहरण के लिए, अगर मैं डेटाबेस में नाम "जॉन" है, जब मैं "जॉन" के लिए खोज क्वेरी एन्क्रिप्टेड है (Student.encrypt_name (पैरामीटर [: यहाँ अपने मॉडल का हिस्सा है : खोज])) डेटाबेस से पूछताछ से पहले, और परिणाम वापस आ गया है। Elasticsearch वाइल्डकार्ड खोज की अनुमति देता है, उदाहरण के लिए यदि मैं "जोह *" खोजता हूं, तो मिलान किए गए परिणाम को वापस करना चाहिए, लेकिन एन्क्रिप्टेड कीवर्ड "जोह" एन्क्रिप्टेड "जॉन" से अलग है, और डीबी कोई परिणाम नहीं देता है। इस पर किसी भी समाधान की सराहना की जाएगी।

सादर, रादोस्लाव

+0

क्या आपको इसके लिए कोई समाधान मिला? मेरी भी यही समस्या है –

उत्तर

2

लघु जवाब - पूर्ण पाठ खोज और ग्राहक एन्क्रिप्शन अत्याधुनिक प्रौद्योगिकी की वर्तमान स्थिति पर परस्पर अनन्य हैं।

लंबे समय तक जवाब:

  1. इसके अतिरिक्त आपके क्लियर नाम की soundex की दुकान है और उसके द्वारा की तुलना कर सकते हैं। इसके लिए कार्यक्षमता और सुरक्षा दोनों में समझौता की आवश्यकता है। जांचें कि यह क्या है और स्वयं द्वारा न्याय करें।

  2. अलग तालिका में एन्क्रिप्टेड नाम के सभी संभावित आंशिक मिलान (या कम से कम कुछ समझदार सबसेट) स्टोर करें और पहचान से मिलान करें (एन्क्रिप्टेड डेटा के साथ संभव)। मेरे लिए नहीं, लेकिन अगर आप साहसी महसूस करते हैं तो आप 'डेटा हैशिंग' और 'व्यस्त सूचकांक' के लिए Google पर जा सकते हैं। ध्यान दें कि इससे सुरक्षा भी होती है।

  3. सैद्धांतिक results हैं लेकिन मुझे कार्यान्वयन के करीब कुछ भी नहीं मिला है।

0

यदि आपका डेटा अपेक्षाकृत छोटा है एक अन्य विकल्प सर्वर स्मृति में डाटा को कैश और संग्रहित डेटासेट पर रेगुलर एक्सप्रेशन मिलान का संचालन करने के लिए है। यह मतलब हो सकता है यदि:

  1. आप स्कूल प्रति ~ 1000 छात्रों को
  2. अपने कैश कुंजी ऐसी है कि किसी दिए गए स्कूल केवल अपने छात्रों भीतर खोज कर सकते
  3. आप क्षेत्रों में से कम से कम सेट आप के लिए की जरूरत है कैश पूरे ऑब्जेक्ट को क्रमबद्ध करने के बिना खोज

बेशक, यह हैकर के लिए आपके वेबसर्वर मेमोरी तक पहुंचने और डेटा को पढ़ने के लिए संभव हो सकता है। इसे आंशिक रूप से एक अच्छी तरह से डिज़ाइन किए गए कैश फ्लशिंग नीति द्वारा कम किया जा सकता है।

संबंधित मुद्दे