Oracle में PL / SQL काम करने वाले एप्लीकेशन डेवलपर्स के लिए सुरक्षा


13

ओरेकल में स्कीमा स्तर के विशेषाधिकारों की कमी को आप कैसे संभालते हैं? ओरेकल की सुरक्षा वास्तुकला उन अनुप्रयोगों के लिए अच्छी तरह से काम करती है जिन्हें केवल ऑब्जेक्ट स्तर विशेषाधिकारों की आवश्यकता होती है और यह डीबीए के लिए अच्छी तरह से काम करता है जिन्हें कुछ प्रतिबंधों की आवश्यकता होती है। हालांकि, कई स्कीमा में फ्रंट एंड एप्लिकेशन और PL / SQL के साथ विकास करने वाले प्रोग्रामर के लिए आर्किटेक्चर में एक बड़ा गैपिंग छेद है। यहाँ मेरे नीचे उनके विकल्पों के साथ कुछ विकल्प हैं:

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

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

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

  4. प्रत्येक प्रोग्रामर को डीबीए विशेषाधिकार दें। - यहां नकारात्मक पक्ष सुरक्षा है। किसी भी स्कीमा प्रोग्रामर को किसी स्कीमा से बाहर नहीं रखा जा सकता है और कोई भी प्रोग्रामर किसी भी अन्य प्रोग्रामर (DBA) को प्रतिरूपित कर सकता है।

प्रत्येक प्रोग्रामर SELECT / INSERT / CREATE / etc को अनुदान देने के लिए एक लापता विकल्प प्रतीत होता है। स्कीमा में विशेषाधिकारों के लिए उन्हें विकास करने की आवश्यकता होती है। वे एक कनेक्शन का उपयोग करके अपना काम करने के लिए स्वयं को लॉगिन करते हैं। स्कीमा में नई वस्तुओं तक उनकी पहुंच तुरंत उपलब्ध है।

क्या मैं कुछ भूल रहा हूँ? आप पीएल / एसक्यूएल विकास करने वाले एप्लिकेशन प्रोग्रामर को कैसे संभालते हैं?


3
+1 महान प्रश्न - यह, एकीकृत स्रोत नियंत्रण की कमी के साथ मिलकर, एक बहु-डेवलपर वातावरण में ओरेकल के साथ एक प्रमुख मुद्दा है।
स्कॉटकर

जवाबों:


11

उन दिनों में जब मैंने ओरेकल की दुकान में काम किया था, हमारे पास एक विशिष्ट 'देव' (विकास) सर्वर था, जिसमें 'ठेस' (उत्पादन) सर्वर की तुलना में अलग-अलग सुरक्षा प्रतिबंध थे। डेवलपर्स जो कुछ भी कर सकते थे, वे कर सकते थे और फिर हम उत्पादन सर्वर पर लागू करने के लिए आवश्यक स्क्रिप्ट को डीबीए को सौंप देंगे।

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


+1 हमारे सामान्य उपयोग डेटाबेस के साथ, डेवलपर्स बहुत विविध परियोजनाओं पर काम करते हैं, इसलिए कम से कम विशेषाधिकार का सिद्धांत उन्हें विकास सर्वर तक भी पूर्ण पहुंच नहीं देगा। ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel

@Leigh - मुझे शायद स्पष्ट करना चाहिए ... देव सर्वर आपके पास सबसे अधिक भाग के लिए # 1 के रूप में गिर गया, न कि # 4
जो

1
मुझे याद है कि डीईवी डेटाबेस उत्पादन से क्लोन किया गया था, फिर डेवलपर्स को प्रतिबंधों के बिना काम करने में सक्षम बनाने के लिए जटिल अनुदान। अंत में प्रत्येक डेवलपर को अपना डेटाबेस और डीबीए एक्सेस देना आसान हो गया। फिर एक रिलीज चक्र के माध्यम से देव में परिवर्तन खिलाएगा। वर्चुअलाइजेशन के साथ अब आसान होना चाहिए।
Sumnibot

@Sumnibot - प्रत्येक डेवलपर के लिए उन्हें अनुमति देने की तुलना में एक अलग डेटाबेस बनाए रखने, बैकअप, आदि को स्थापित करने में आसान है! इनमें से प्रत्येक को अद्यतित रखने के लिए आवश्यक समय के अलावा ऐसा लगता है कि लाइसेंस की लागत काफी होगी या आपने उन्हें उद्यम संस्करण नहीं दिया?
लेह रिफ़ेल

1
मेरे लिए कोई ठोस जवाब नहीं है।
माइकल-ओ

3

वस्तुओं के संग्रह को संबद्ध करने के लिए भूमिकाओं का उपयोग करें, फिर भूमिकाओं तक पहुंच प्रदान करें

GRANT बयान के डीबीए अनुमति देता है:

उपयोगकर्ताओं, भूमिकाओं और सार्वजनिक विशेष ऑब्जेक्ट के लिए ऑब्जेक्ट विशेषाधिकार। तालिका 18-2 में ऑब्जेक्ट विशेषाधिकारों और उन कार्यों को सूचीबद्ध किया गया है जो वे अधिकृत करते हैं।

चूंकि ऑब्जेक्ट विशेषाधिकारों को किसी भूमिका के लिए दिया जा सकता है, इसलिए स्कीमा में सभी तालिकाओं तक भूमिका पहुंच प्रदान करना अपेक्षाकृत आसान है:

sql> स्पूल प्राइवेटसेक्स्ल
sql> 'scott पर अनुदान चुनें' का चयन करें। || table_name || to role_select।) dba_tables से जहां मालिक = 'SCOTT';
एसक्यूएल> @ privs.sql
sql> john, sam, peter को role_select अनुदान;

यह GRANT CREATE TABLEउपयुक्त स्कीमा-उपयोगकर्ता द्वारा भूमिका के लिए जारी किए गए के साथ संयुक्त है, इसका मतलब है कि डेवलपर्स तालिकाओं का चयन और निर्माण कर सकते हैं। यह सही नहीं है क्योंकि निर्मित तालिका के लिए स्क्रिप्ट को फिर से चलाने की आवश्यकता होती है, लेकिन WITH GRANT OPTIONयह सुझाव देता है कि प्रत्येक डेवलपर तब उपयुक्त तालिका में बनाई गई तालिका तक पहुंच प्रदान कर सकता है।

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

संपादित करें -

अनुदान के अनुसार , CREATE TABLEविशेषाधिकार:

ग्रांट के स्कीमा में एक तालिका बनाएं।

इस प्रकार, उन्हें सही उपयोगकर्ता से तालिका, परिवर्तन तालिका, आदि बनाकर, उन्हें उस उपयोगकर्ता के स्कीमा का उपयोग करने में सक्षम होना चाहिए जैसे कि वे उपयुक्त उपयोगकर्ता थे।


मैंने वह कार्यप्रणाली देखी है जिसका संदर्भ आपने बहुत सफलता के बिना किया है; हालाँकि, मेरा मानना ​​है कि आप सही हैं कि यह व्यापक परीक्षण के साथ किया जा सकता है। समस्या यह है कि यह केवल डेवलपर्स को तालिकाओं पर पहुंच का चयन करने की अनुमति देता है। सीधे या एक भूमिका के माध्यम से तालिका बनाकर उन्हें केवल अपने स्कीमा पर तालिका विशेषाधिकार बनाने की अनुमति देता है। वे अभी भी किसी स्कीमा में टेबल, प्रक्रिया, पैकेज, ट्रिगर या किसी भी अन्य वस्तुओं को अपने अलावा नहीं बना सकते हैं, या आपकी बात यह है कि वे केवल विकास पर भी अपने स्वयं के स्कीमा में वस्तुओं का निर्माण करना चाहिए?
लेह रिफ़ेल

@Leigh अद्यतन विवरण के साथ।
ब्रायन बॉसुन-स्टैंटन

यह अभी नहीं है कि ओरेकल कैसे काम करता है। इसे आज़माएं: "ThisIsMy1Password" द्वारा पहचाना गया उपयोगकर्ता u1 बनाएं; "ThisIsMy1Password" द्वारा पहचाना गया उपयोगकर्ता u2 बनाएँ; u1 को dba देना; अनुदान u2 से कनेक्ट; कनेक्ट u1 / "ThisIsMy1Password" @db; अनुदान तालिका 2 को बनाएं; कनेक्ट u2 / "ThisIsMy1Password" @db; तालिका बनाएं u1.t1 (c1 varchar2 (10)); अंतिम चरण अपर्याप्त विशेषाधिकार के साथ विफल हो जाता है।
लेह रिफ़ेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.