2009-08-10 7 views
6

मुझे यह पता लगाने की आवश्यकता है कि ओरेकल 10 जी डीबी (इस मामले में, एक पैकेज) में किसी निश्चित ऑब्जेक्ट पर कौन सी स्कीमाटा पहले ही निष्पादित अनुमति दी गई है। ऐसा करने के लिए मेरे लिए सबसे आसान तरीका क्या है? क्या यह जानकारी प्रदान करने के लिए एक अंतर्निहित कार्य है?मैं कैसे जांचूं कि स्कीमाटा दिया गया है ओरेकल ऑब्जेक्ट पर अतिरिक्त अनुमति?

उत्तर

6
SELECT grantee 
    FROM all_tab_privs 
WHERE table_name = '<your object name>' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 

हाँ, मुझे पता है, यह "table_name" कहता है लेकिन यह निष्पादन योग्य वस्तुओं पर भी लागू होता है। तालिका DBA_TAB_PRIVS भी काम करता है। इन विचारों में से चयन करने और सभी डेटा देखने के लिए आपको उचित अनुमतियों की आवश्यकता होगी (उदा।, डीबीए भूमिका, किसी भी प्रकार का चयन करें)।

मार्टिन की टिप्पणी के जवाब में ... ऊपर दिए गए कार्यों को करने का सबसे आसान तरीका है जिसे मैं जानता हूं। आप संकुल के लिए यह सीमित करना चाहते हैं, इस प्रयास करें:

SELECT * FROM all_tab_privs JOIN all_objects ON (table_name = object_name) 
WHERE table_name = '<your object name>' 
    AND object_type = 'PACKAGE' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 
+0

मैं या तो कुछ अधिक सामान्य है, या एक पैकेज विशेष मामले के बाद वास्तव में था ... – MPritchard

+1

सभी को माफ किया जाता है! अच्छा पुराना ऑरैकल और सिस्टम टेबल के नो-बकवास नामकरण :) – MPritchard

+0

lol, all_tab_privs इस तालिका के लिए एक भयानक नाम है – Reimius

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

  • कोई संबंधित समस्या नहीं^_^