एसक्यूएल में उपयोगकर्ताओं और भूमिकाओं के लिए अभिगम नियंत्रण

सुरक्षा डेटाबेस प्रशासकों के लिए सर्वोपरि है जो अनधिकृत बाहरी लोगों और उनके अधिकारियों से अधिक होने का प्रयास करने वाले अंदरूनी बाहरी लोगों के प्राइमिंग आंखों से महत्वपूर्ण व्यावसायिक डेटा के अपने गीगाबाइट की रक्षा करना चाहते हैं। सभी रिलेशनल डेटाबेस प्रबंधन प्रणालियां इन खतरों को कम करने के लिए डिज़ाइन की गई कुछ प्रकार की आंतरिक सुरक्षा तंत्र प्रदान करती हैं। वे ओरेकल और माइक्रोसॉफ्ट एसक्यूएल सर्वर जैसे उन्नत रिलेशनल डेटाबेस द्वारा समर्थित जटिल उपयोगकर्ता / भूमिका संरचना के लिए माइक्रोसॉफ्ट एक्सेस द्वारा प्रदान की गई सरल पासवर्ड सुरक्षा से हैं। यह आलेख संरचित क्वेरी भाषा (या SQL ) को लागू करने वाले सभी डेटाबेसों के लिए सामान्य सुरक्षा तंत्र पर केंद्रित है। साथ में, हम डेटा एक्सेस नियंत्रण को मजबूत करने और आपके डेटा की सुरक्षा सुनिश्चित करने की प्रक्रिया के माध्यम से चलेंगे।

उपयोगकर्ता

सर्वर-आधारित डेटाबेस सभी उपयोगकर्ता ऑपरेटिंग सिस्टम में उपयोग किए जाने वाले उपयोगकर्ता अवधारणा का समर्थन करते हैं। यदि आप Microsoft Windows NT और Windows 2000 में पाए गए उपयोगकर्ता / समूह पदानुक्रम से परिचित हैं, तो आप पाएंगे कि SQL सर्वर और ओरेकल द्वारा समर्थित उपयोगकर्ता / भूमिका समूह बहुत समान हैं।

यह अत्यधिक अनुशंसा की जाती है कि आप प्रत्येक डेटाबेस के लिए अलग-अलग डेटाबेस उपयोगकर्ता खाते बनाएं जो आपके डेटाबेस तक पहुंच पाएंगे। उपयोगकर्ताओं के बीच खातों को साझा करना तकनीकी रूप से संभव है या प्रत्येक डेटाबेस के लिए केवल एक उपयोगकर्ता खाते का उपयोग करें, जिसे आपके डेटाबेस तक पहुंचने की आवश्यकता है, लेकिन मैं इस अभ्यास को दो कारणों से दृढ़ता से हतोत्साहित करता हूं। सबसे पहले, यह अलग-अलग उत्तरदायित्व को खत्म कर देगा-यदि कोई उपयोगकर्ता आपके डेटाबेस में बदलाव करता है (आइए खुद को $ 5,000 बढ़ाकर बताएं), तो आप इसे ऑडिट लॉग के उपयोग के माध्यम से किसी विशिष्ट व्यक्ति को वापस ढूंढने में सक्षम नहीं होंगे। इसके अलावा, यदि कोई विशिष्ट उपयोगकर्ता आपके संगठन को छोड़ देता है और आप डेटाबेस से अपनी पहुंच को हटाना चाहते हैं, तो आपको उस पासवर्ड को बदलने के लिए मजबूर होना होगा जो सभी उपयोगकर्ता भरोसा करते हैं।

उपयोगकर्ता खातों को बनाने के तरीके प्लेटफ़ॉर्म से प्लेटफ़ॉर्म तक भिन्न होते हैं और आपको सटीक प्रक्रिया के लिए अपने डीबीएमएस-विशिष्ट दस्तावेज़ों से परामर्श करना होगा। माइक्रोसॉफ्ट एसक्यूएल सर्वर उपयोगकर्ताओं को sp_adduser संग्रहीत प्रक्रिया के उपयोग की जांच करनी चाहिए। ओरेकल डेटाबेस प्रशासक CREATE USER कमांड को उपयोगी पाएंगे। आप वैकल्पिक प्रमाणीकरण योजनाओं की जांच भी कर सकते हैं। उदाहरण के लिए, माइक्रोसॉफ्ट एसक्यूएल सर्वर विंडोज एनटी एकीकृत सुरक्षा के उपयोग का समर्थन करता है। इस योजना के तहत, उपयोगकर्ताओं को उनके विंडोज एनटी उपयोगकर्ता खातों द्वारा डेटाबेस में पहचाना जाता है और डेटाबेस तक पहुंचने के लिए अतिरिक्त उपयोगकर्ता आईडी और पासवर्ड दर्ज करने की आवश्यकता नहीं होती है। यह दृष्टिकोण डेटाबेस प्रशासकों के बीच बेहद लोकप्रिय है क्योंकि यह खाता प्रबंधन के बोझ को नेटवर्क प्रशासन कर्मचारियों को बदल देता है और यह अंतिम उपयोगकर्ता को एकल साइन-ऑन की सुविधा प्रदान करता है।

भूमिकाएँ

यदि आप उपयोगकर्ताओं की एक छोटी संख्या वाले वातावरण में हैं, तो आप शायद पाएंगे कि उपयोगकर्ता खाते बनाना और उन्हें सीधे अनुमतियां देना आपकी आवश्यकताओं के लिए पर्याप्त है। हालांकि, यदि आपके पास बड़ी संख्या में उपयोगकर्ता हैं, तो आप खातों को बनाए रखने और उचित अनुमतियों के बोझ से अभिभूत होंगे। इस बोझ को कम करने के लिए, संबंधपरक डेटाबेस भूमिकाओं की धारणा का समर्थन करते हैं। डेटाबेस भूमिकाएं विंडोज एनटी समूहों के समान ही काम करती हैं। उपयोगकर्ता खाते भूमिका (ओं) को आवंटित किए जाते हैं और अनुमतियों को व्यक्तिगत उपयोगकर्ता खातों की बजाय पूरी तरह से भूमिका के लिए आवंटित किया जाता है। उदाहरण के लिए, हम एक डीबीए भूमिका बना सकते हैं और फिर हमारे प्रशासनिक कर्मचारियों के उपयोगकर्ता खातों को इस भूमिका में जोड़ सकते हैं। एक बार ऐसा करने के बाद, हम भूमिका के लिए अनुमति निर्दिष्ट करके सभी मौजूदा (और भविष्य) प्रशासकों को एक विशिष्ट अनुमति असाइन कर सकते हैं। एक बार फिर, भूमिकाएं बनाने की प्रक्रिया प्लेटफ़ॉर्म से प्लेटफ़ॉर्म तक भिन्न होती है। एमएस एसक्यूएल सर्वर प्रशासकों को sp_addrole संग्रहीत प्रक्रिया की जांच करनी चाहिए जबकि ओरेकल डीबीए को CREATE ROLE वाक्यविन्यास का उपयोग करना चाहिए।

अनुदान अनुमतियां

अब जब हमने उपयोगकर्ताओं को हमारे डेटाबेस में जोड़ा है, तो समय पर अनुमति जोड़कर सुरक्षा को मजबूत करना शुरू करने का समय है। हमारा पहला कदम हमारे उपयोगकर्ताओं को उपयुक्त डेटाबेस अनुमतियां प्रदान करना होगा। हम SQL अनुदान कथन के उपयोग के माध्यम से इसे पूरा करेंगे।

कथन का वाक्यविन्यास यहां दिया गया है:

अनुदान <अनुमतियाँ>
[चालू <टेबल>]
<उपयोगकर्ता / भूमिका> के लिए
[अनुदान विकल्प के साथ]

अब, आइए इस कथन को लाइन-बाय-लाइन देखें। पहली पंक्ति, अनुदान <अनुमतियाँ>, हमें प्रदान की जाने वाली विशिष्ट तालिका अनुमतियां निर्दिष्ट करने की अनुमति देती है। ये या तो टेबल-स्तरीय अनुमतियां हो सकती हैं (जैसे चयन, इन्सर्ट, अद्यतन और हटाएं) या डेटाबेस अनुमतियां (जैसे तालिका बनाएं, वैकल्पिक डेटा और अनुदान)। एक ही अनुदान में एक से अधिक अनुमति दी जा सकती है, लेकिन तालिका-स्तर अनुमतियां और डेटाबेस-स्तरीय अनुमतियों को एक ही कथन में जोड़ा नहीं जा सकता है।

दूसरी पंक्ति, चालू

, तालिका-स्तर अनुमतियों के लिए प्रभावित तालिका निर्दिष्ट करने के लिए प्रयोग की जाती है। यदि हम डेटाबेस-स्तरीय अनुमतियां दे रहे हैं तो यह पंक्ति छोड़ी जाती है। तीसरी पंक्ति उपयोगकर्ता या भूमिका को निर्दिष्ट करती है जिसे अनुमतियां दी जा रही हैं।

अंत में, अनुदान विकल्प के साथ चौथी पंक्ति वैकल्पिक है। यदि इस पंक्ति को कथन में शामिल किया गया है, तो प्रभावित उपयोगकर्ता को अन्य उपयोगकर्ताओं को भी वही अनुमति देने की अनुमति है। ध्यान दें कि अनुमति के साथ अनुमोदित होने पर अनुदान विकल्प के साथ निर्दिष्ट नहीं किया जा सकता है।

उदाहरण

आइए कुछ उदाहरण देखें। हमारे पहले परिदृश्य में, हमने हाल ही में 42 डेटा एंट्री ऑपरेटरों के एक समूह को किराए पर लिया है जो ग्राहक रिकॉर्ड जोड़ और बनाए रखेंगे। उन्हें ग्राहक तालिका में जानकारी तक पहुंचने, इस जानकारी को संशोधित करने और तालिका में नए रिकॉर्ड जोड़ने में सक्षम होना चाहिए। वे डेटाबेस से पूरी तरह से एक रिकॉर्ड को हटाने में सक्षम नहीं होना चाहिए। सबसे पहले, हमें प्रत्येक ऑपरेटर के लिए उपयोगकर्ता खाते बनाना चाहिए और फिर उन्हें सभी को एक नई भूमिका, डेटाएन्ट्री में जोड़ना चाहिए। इसके बाद, हमें उचित अनुमति देने के लिए निम्न SQL कथन का उपयोग करना चाहिए:

अनुदान चुनें, सम्मिलित करें, अद्यतन करें
ग्राहकों पर
डेटा एंट्री के लिए

और यह सब कुछ है! अब चलिए एक ऐसे मामले की जांच करें जहां हम डेटाबेस-स्तरीय अनुमतियां असाइन कर रहे हैं। हम अपने डेटाबेस में नई टेबल जोड़ने के लिए डीबीए भूमिका के सदस्यों को अनुमति देना चाहते हैं। इसके अलावा, हम चाहते हैं कि वे अन्य उपयोगकर्ताओं को ऐसा करने की अनुमति दें। यहां SQL कथन है:

अनुदान तालिका बनाएं
डीबीए के लिए
अनुदान विकल्प के साथ

ध्यान दें कि हमने यह सुनिश्चित करने के लिए अनुदान विकल्प लाइन के साथ शामिल किया है कि हमारे डीबीए अन्य उपयोगकर्ताओं को यह अनुमति असाइन कर सकें।

अनुमतियां हटा रहा है

एक बार जब हम अनुमतियां देते हैं, तो अक्सर उन्हें बाद की तारीख में रद्द करने के लिए आवश्यक साबित होता है। सौभाग्य से, एसक्यूएल हमें पहले दी गई अनुमतियों को हटाने के लिए REVOKE आदेश प्रदान करता है। वाक्यविन्यास यहां दिया गया है:

पुनर्वास [अनुदान विकल्प] <अनुमतियाँ>
चालू <टेबल>
<उपयोगकर्ता / भूमिका> से

आप देखेंगे कि इस कमांड का सिंटैक्स GRANT कमांड के समान है। केवल अंतर यह है कि अनुदान के अंत में आदेश विकल्प के बजाय REVOKE कमांड लाइन पर निर्दिष्ट किया गया है। उदाहरण के तौर पर, आइए कल्पना करें कि हम ग्राहक डेटाबेस से रिकॉर्ड्स को हटाने के लिए मैरी की पूर्व अनुमत अनुमति को निरस्त करना चाहते हैं। हम निम्नलिखित कमांड का उपयोग करेंगे:

रिवॉक हटा दें
ग्राहकों पर
मैरी से

और यह सब कुछ है! माइक्रोसॉफ्ट एसक्यूएल सर्वर द्वारा समर्थित एक अतिरिक्त तंत्र है जो उल्लेखनीय है - डेनी कमांड। इस आदेश का उपयोग उपयोगकर्ता को अनुमति की स्पष्ट रूप से इनकार करने के लिए किया जा सकता है कि वे अन्यथा वर्तमान या भविष्य की भूमिका सदस्यता के माध्यम से हो सकते हैं। वाक्यविन्यास यहां दिया गया है:

डेनी <अनुमतियाँ>
चालू <टेबल>
<उपयोगकर्ता / भूमिका के लिए

उदाहरण

हमारे पिछले उदाहरण पर लौटते हुए, आइए कल्पना करें कि मैरी प्रबंधकों की भूमिका का सदस्य भी था जिसकी ग्राहक तालिका तक पहुंच थी। पिछले REVOKE कथन तालिका तक पहुंच से इनकार करने के लिए पर्याप्त नहीं होगा। यह उसके उपयोगकर्ता खाते को लक्षित करने वाले अनुदान विवरण के माध्यम से उसे दी गई अनुमति को हटा देगा, लेकिन प्रबंधकों की भूमिका में उनकी सदस्यता के माध्यम से प्राप्त अनुमतियों को प्रभावित नहीं करेगा। हालांकि, अगर हम डेनी स्टेटमेंट का उपयोग करते हैं तो यह अनुमति की विरासत को अवरुद्ध कर देगा। यहां आदेश दिया गया है:

डेनी हटा दें
ग्राहकों पर
मैरी के लिए

डेनी कमांड डेटाबेस एक्सेस नियंत्रण में अनिवार्य रूप से "नकारात्मक अनुमति" बनाता है। अगर हम बाद में ग्राहक तालिका से पंक्तियों को हटाने के लिए मैरी को अनुमति देने का निर्णय लेते हैं, तो हम केवल GRANT कमांड का उपयोग नहीं कर सकते हैं। वह आदेश तुरंत मौजूदा डेनी द्वारा ओवरराइड किया जाएगा। इसके बजाए, हम नकारात्मक अनुमति प्रविष्टि को हटाने के लिए पहले REVOKE आदेश का उपयोग करेंगे:

रिवॉक हटा दें
ग्राहकों पर
मैरी से

आप देखेंगे कि यह आदेश बिल्कुल वही है जैसा कि सकारात्मक अनुमति को निकालने के लिए उपयोग किया जाता है। याद रखें कि डेनी और अनुदान दोनों समान काम में काम करते हैं * mdash; वे दोनों डेटाबेस एक्सेस कंट्रोल मैकेनिज्म में अनुमतियां (सकारात्मक या नकारात्मक) बनाते हैं। REVOKE आदेश निर्दिष्ट उपयोगकर्ता के लिए सभी सकारात्मक और नकारात्मक अनुमतियों को हटा देता है। एक बार यह आदेश जारी करने के बाद, मैरी तालिका से पंक्तियों को हटाने में सक्षम होगी अगर वह उस भूमिका के सदस्य हैं जो उस अनुमति के पास है। वैकल्पिक रूप से, उसके खाते में सीधे अनुमति प्रदान करने के लिए एक अनुदान आदेश जारी किया जा सकता है।

इस आलेख के दौरान, आपने मानक क्वेरी भाषा द्वारा समर्थित एक्सेस कंट्रोल मैकेनिज्म के बारे में एक अच्छा सौदा सीखा है। इस परिचय से आपको एक अच्छा प्रारंभिक बिंदु प्रदान करना चाहिए, लेकिन मैं आपको अपने सिस्टम द्वारा समर्थित उन्नत सुरक्षा उपायों को जानने के लिए अपने डीबीएमएस दस्तावेज़ों का संदर्भ देने के लिए प्रोत्साहित करता हूं। आप पाएंगे कि कई डेटाबेस अधिक उन्नत एक्सेस कंट्रोल मैकेनिज्म का समर्थन करते हैं, जैसे विशिष्ट कॉलम पर अनुमतियां देना।