2010-11-29 26 views
8

के किसी अन्य उपयोगकर्ता को संग्रहित प्रक्रियाओं पर अधिकार प्रदान करना मैं अंडरग्रेजुएट स्टडीज का छात्र हूं, और मुझे उपयोगकर्ता ए के स्वामित्व के अधिकार देने में छोटी समस्या का सामना करना पड़ रहा है डेटाबेस में उपयोगकर्ता बी के स्वामित्व वाली संग्रहीत प्रक्रिया में ओरेकल 10 जी मोड = XE।ओरेकल

कृपया मुझे किसी अन्य उपयोगकर्ता ए

उत्तर

20

को संग्रहीत प्रक्रिया xyz पर स्वामित्व का अधिकार देने के लिए एसक्यूएल आदेशों लिखित रूप में मदद मुझे यकीन है कि मैं समझता हूँ कि आप "स्वामित्व के अधिकार" से क्या मतलब है नहीं कर रहा हूँ।

उपयोगकर्ता B एक संग्रहीत प्रक्रिया का मालिक है, तो उपयोगकर्ता B उपयोगकर्ता प्रदान कर सकते हैं संग्रहीत प्रक्रिया

GRANT EXECUTE ON b.procedure_name TO a 

उपयोगकर्ता A को चलाने के लिए तो पूरी तरह से योग्य नाम का उपयोग प्रक्रिया कहेंगे एक अनुमति, यानी

BEGIN 
    b.procedure_name(<<list of parameters>>); 
END; 

वैकल्पिक रूप से, उपयोगकर्ता ए पूरी तरह से योग्य प्रक्रिया नाम का उपयोग करने से बचने के लिए एक समानार्थी बना सकता है।

CREATE SYNONYM procedure_name FOR b.procedure_name; 

BEGIN 
    procedure_name(<<list of parameters>>); 
END; 
4

आप ऐसा नहीं कर सकते जो मुझे लगता है कि आप ऐसा करने के लिए कह रहे हैं।

प्रक्रियाओं पर आप केवल एक ही विशेषाधिकार प्रदान कर सकते हैं निष्कासित और डेबग।

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

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

जस्टिन उल्लेख किया है, जिस तरह से बी के स्वामित्व में एक प्रक्रिया के लिए एक करने के लिए निष्पादन अधिकार देने के लिए के रूप में:

GRANT EXECUTE ON b.procedure_name TO a; 
+1

+1 किसी भी प्रक्रिया को बनाने से कम कठोर दृष्टिकोण, लेकिन साथ ही समस्या के साथ उपयोगकर्ता बी को उपयोगकर्ता ए पासवर्ड का उपयोग करके एप्लिकेशन को देना होगा, जिससे उन्हें उस उपयोगकर्ता के रूप में लॉगिन करने की अनुमति मिल जाएगी। ऐसा लगता है कि आप स्कीमा स्तर के विशेषाधिकार देना चाहते हैं, लेकिन वे ओरेकल में उपलब्ध नहीं हैं। –

+0

ठीक है सर, कृपया मुझे बताएं कि उपयोगकर्ता बी को संग्रहीत प्रक्रिया को चलाने के लिए उपयोगकर्ता ए को अनुदान अधिकार कैसे प्राप्त करें। – Basmah

0

संकुल और Oracle में संग्रहित प्रक्रियाओं चूक के अधिकारों का उपयोग कर निष्पादित पैकेज/प्रक्रिया OWNER, वर्तमान में उपयोगकर्ता पर लॉग इन नहीं है।

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

आपको लगता है कि पैकेज बुला उपयोगकर्ता की अनुमतियों का उपयोग कर चलाए जाना चाहिए चाहते हैं, तो पैकेज बनाने फिर जब आप AUTHID CURRENT_USER

ओरेकल प्रलेखन "Invoker राइट्स बनाम Definer अधिकार" में अधिक जानकारी है http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

निर्दिष्ट करने की आवश्यकता

उम्मीद है कि यह मदद करता है।

0
SQL> grant create any procedure to testdb; 

यह एक आदेश है जब हम "testdb" उपयोगकर्ता को विशेषाधिकार देना चाहते हैं।

1

अपने डीबीए खाते पर, UserB grant create any procedure to USERB

प्रक्रिया दिखेगा

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE 
--Must add the line below 
AUTHID CURRENT_USER AS 
    BEGIN 
    --DO SOMETHING HERE 
    END 
END 

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

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