Oracle के भीतर सभी उपयोगकर्ता विशेषाधिकारों को पुनः प्राप्त करना एक साधारण कार्य से लेकर एक बुनियादी SQL क्वेरी का उपयोग करके एक उन्नत स्क्रिप्ट तक हो सकता है, जो मुख्य रूप से इस बात पर निर्भर करता है कि सर्वर के भीतर भूमिकाओं और विशेषाधिकारों को कैसे कॉन्फ़िगर किया गया है।
इस संक्षिप्त ट्यूटोरियल में, हम मूल SQL क्वेरी विधि के साथ-साथ उन्नत स्क्रिप्ट विधि दोनों को शामिल करेंगे ताकि आपके सेटअप की जटिलता की परवाह किए बिना आपको कोई समस्या न हो।
DBA/USER प्रिविलेज व्यू की क्वेरी करना
Oracle के लिए एक डेटाबेस व्यवस्थापक (DBA) केवल DBA_SYS_PRIVS में पंक्तियों को देखने के लिए एक क्वेरी निष्पादित कर सकता है , DBA_TAB_PRIVS , और DBA_ROLE_PRIVS system . से संबंधित उपयोगकर्ता विशेषाधिकारों के बारे में जानकारी प्राप्त करने के लिए , tables , और roles , क्रमशः।
उदाहरण के लिए, एक DBA जो सभी system . को देखना चाहता है सभी उपयोगकर्ताओं को दिए गए विशेषाधिकार निम्नलिखित प्रश्न जारी करेंगे:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS व्यू में डेटा के तीन कॉलम होते हैं:
GRANTEEवह नाम, भूमिका या उपयोगकर्ता है जिसे विशेषाधिकार सौंपा गया था।PRIVILEGEवह विशेषाधिकार है जिसे सौंपा गया है।ADMIN_OPTIONइंगित करता है कि दिए गए विशेषाधिकार मेंADMIN. भी शामिल है या नहीं विकल्प।
यह निर्धारित करने के लिए कि किन उपयोगकर्ताओं के पास प्रत्यक्ष है table . तक पहुंच प्रदान करें हम DBA_TAB_PRIVS . का उपयोग करेंगे देखें:
SELECT
*
FROM
DBA_TAB_PRIVS;
आप इस क्वेरी से लौटाए गए कॉलम के बारे में अधिक जानकारी के लिए आधिकारिक दस्तावेज़ देख सकते हैं, लेकिन महत्वपूर्ण कॉलम हैं:
GRANTEEदी गई पहुंच वाले उपयोगकर्ता का नाम है।TABLE_NAMEवस्तु का नाम है (तालिका, अनुक्रमणिका, अनुक्रम, आदि)।PRIVILEGEGRANTEE. को दिया गया विशेषाधिकार है संबंधित वस्तु के लिए।
अंत में, DBA_ROLE_PRIVS की क्वेरी करना view में बहुत सारी जानकारी समान है लेकिन roles . पर लागू होती है इसके बजाय, जहां GRANTED_ROLE कॉलम विचाराधीन भूमिका को निर्दिष्ट करता है:
SELECT
*
FROM
DBA_ROLE_PRIVS;
वर्तमान उपयोगकर्ता के विशेषाधिकारों की क्वेरी करना
यदि डीबीए पहुंच संभव नहीं है या आवश्यक नहीं है, तो केवल वर्तमान उपयोगकर्ता के विशेषाधिकारों को देखने के लिए उपरोक्त प्रश्नों को थोड़ा संशोधित करना भी संभव है। ।
यह वैकल्पिक रूप से USER_ . को क्वेरी करके किया जाता है उपरोक्त के संस्करण DBA_ विचार। इस प्रकार, DBA_SYS_PRIVS को देखने के बजाय हम USER_SYS_PRIVS के बारे में पूछेंगे , इस तरह:
SELECT
*
FROM
USER_SYS_PRIVS;
चूंकि USER_ विशेषाधिकार दृश्य प्रभावी रूप से उनके DBA_ . के समान होते हैं समकक्ष, लेकिन केवल वर्तमान उपयोगकर्ता के लिए विशिष्ट, लौटाए गए डेटा के प्रकार और कॉलम नाम सभी DBA_ क्वेरी करते समय समान होते हैं कुल विचार।
सभी विशेषाधिकार खोजने के लिए उन्नत स्क्रिप्ट
जबकि उपरोक्त विधियाँ बुनियादी सिस्टम कॉन्फ़िगरेशन के लिए काम करेंगी, Oracle में चीजें गड़बड़ होने लगती हैं जब कई भूमिकाएँ मौजूद होती हैं जो बदले में अन्य भूमिकाओं को भूमिका विशेषाधिकार प्रदान करती हैं, और इसी तरह नीचे खरगोश के छेद में। चूंकि DBA_ और USER_ विशेषाधिकार दृश्य केवल प्रदर्शित करते हैं GRANTEES सीधे असाइन किए गए . के साथ एक्सेस, अक्सर विशेषाधिकार जो अन्य भूमिकाओं के माध्यम से विरासत में मिलते हैं, आसानी से नहीं दिखाए जाएंगे।
इसे हल करने के लिए, एक उन्नत स्क्रिप्ट का उपयोग करने की सलाह दी जाती है जैसे कि पीट फ़िनिगन का विश्वसनीय कार्य और उसका find_all_privs.sql लिखी हुई कहानी। आप डेविड आर्थर के संशोधित संस्करण को भी चुन सकते हैं, find_all_privs2.sql ।
किसी भी मामले में, इन स्क्रिप्ट का उद्देश्य आपको पुनरावर्ती . की अनुमति देना है किसी विशेष उपयोगकर्ता को दिए गए सभी विशेषाधिकारों का पता लगाएं। जब स्क्रिप्ट role का पता लगाती है उपयोगकर्ता के लिए, यह उस भूमिका को दी गई अन्य भूमिकाओं और विशेषाधिकारों के लिए पुनरावर्ती रूप से खोज करता है, इस प्रक्रिया को पूरी श्रृंखला में दोहराता है। स्क्रिप्ट के परिणाम स्क्रीन पर या वांछित फ़ाइल में आउटपुट हो सकते हैं।
इन लिपियों और उनके उपयोग के बारे में अधिक जानकारी petefinnigan.com पर देखी जा सकती है।