मैं कभी-कभी ऐसे प्रश्न देखता हूं जो पूछ रहा है कि वेब एप्लिकेशन के लिए उपयोगकर्ता पासवर्ड कैसे सुरक्षित रखें (RDBMS का उपयोग करके, मैं फेसबुक या ट्विटर की बात नहीं कर रहा हूं)। सामान्य उत्तर "नमक को पासवर्ड है, फिर इसे एक मजबूत एल्गोरिथम जैसे कि TDES या SHA512" के साथ हैश करें।
मेरा प्रश्न है: एक RDBMS उपयोगकर्ता के रूप में, मुझे पासवर्ड को समस्याग्रस्त करने के लिए बिल्कुल परेशान क्यों होना चाहिए क्योंकि अधिकांश इंजन में अंतर्निहित प्रमाणीकरण तंत्र होता है।
उदाहरण के लिए, यदि कुछ उपयोगकर्ता X मेरे वेब एप्लिकेशन पर खाता उपयोगकर्ता पासवर्ड Y बनाना चाहते हैं, तो निम्न क्वेरी को गलत कैसे जारी कर रहा है:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
फिर मेरे आवेदन के भीतर, उपयोगकर्ता अपने क्रेडेंशियल्स का उपयोग करके डेटाबेस के लिए एक कनेक्शन खोल सकता है और मुझे पासवर्ड प्रबंधन में बिल्कुल भी परेशान नहीं होना पड़ेगा।
मुझे इस विधि के कई फायदे दिखाई देते हैं:
- अगर RDBMS यह निर्णय लेता है कि एन्क्रिप्शन एल्गोरिथ्म को बदलने की आवश्यकता है, तो मुझे सुरक्षा अद्यतन लागू करने के लिए कुछ भी छूने की आवश्यकता नहीं है;
- उपयोगकर्ता प्राधिकरणों को प्रबंधित करना मेरे लिए आसान है। यदि किसी उपयोगकर्ता को व्यवस्थापक की भूमिका में पदोन्नत किया जाता है, तो मुझे उपयोगकर्ता को संबंधित समूह में जोड़ना होगा;
- SQL इंजेक्शन अब व्यर्थ हैं, क्योंकि मैं डेटाबेस में प्रत्येक उपयोगकर्ता को अनुमति देने के लिए अनुमति देने का प्रबंधन करता हूं (उदाहरण के लिए, SO जैसे फ़ोरम में, नए पोस्ट जोड़ना, पोस्ट का उत्तर देना, टिप्पणी करना और संपादन करना / अपने प्रश्न हटाना / उत्तर / टिप्पणियों);
- एक उपयोगकर्ता खाता "अनाम" का उपयोग मेरे आवेदन के लिए अनधिकृत कनेक्शन के लिए किया जा सकता है;
- प्रत्येक उपयोगकर्ता उसके द्वारा प्रदत्त डेटा का स्वामी होता है।
लेकिन वस्तुतः इस विषय पर मेरे द्वारा देखे गए प्रत्येक प्रश्न पर, एक आम सहमति प्रतीत होती है कि यह उस तरह से नहीं है जैसे चीजों को करना है। मेरा सवाल है: क्यों?
नोट: तीसरा बिंदु द्वारा अनुमति दी है नीतियों PostgreSQL में, और सुरक्षा नीतियों Microsoft SQL सर्वर में। मुझे एहसास है कि ये अवधारणाएं नए लोग हैं, लेकिन वैसे भी, अब जब वे यहां हैं, तो मैं जिस तकनीक का वर्णन करता हूं, वह खातों को संभालने का मानक तरीका क्यों नहीं है?