देने रहता है यहां संग्रहीत प्रक्रिया की परिभाषा है:एक संग्रहीत प्रक्रिया के भीतर अपर्याप्त विशेषाधिकार त्रुटि
CREATE OR REPLACE PROCEDURE usp_dropTable(schema VARCHAR, tblToDrop VARCHAR) IS
BEGIN
DECLARE v_cnt NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_cnt
FROM all_tables
WHERE owner = schema
AND table_name = tblToDrop;
IF v_cnt > 0 THEN
EXECUTE IMMEDIATE('DROP TABLE someschema.some_table PURGE');
END IF;
END;
END;
यहाँ कॉल है:
किसी कारण के लिए, मैं अपर्याप्त मिलती रहती है EXECUTE IMMEDIATE कमांड के लिए विशेषाधिकार त्रुटि। मैंने ऑनलाइन देखा और पाया कि अपर्याप्त विशेषाधिकार त्रुटि आमतौर पर ऑरैकल उपयोगकर्ता खाते में पास होने वाली क्वेरी में उपयोग किए गए कमांड के लिए विशेषाधिकार नहीं है, जो इस मामले में डीआरओपी है। हालांकि, मेरे पास विशेषाधिकार ड्रॉप हैं। मैं वास्तव में उलझन में हूं और मुझे ऐसा समाधान नहीं मिल रहा है जो मेरे लिए काम करता है।
अग्रिम धन्यवाद।
समाधान:
स्टीव नीचे उल्लेख किया है, ओरेकल सुरक्षा मॉडल में है कि यह स्पष्ट रूप से प्रक्रिया विशेषाधिकारों की किस तरह उपयोग करने के लिए कहीं न कहीं पता करने की जरूरत है अजीब है। ओरेकल को यह जानने का तरीका है कि CREATE या RESPLACE कथन में AUTHID कीवर्ड का उपयोग करना है। यदि आप प्रक्रिया के निर्माता के रूप में विशेषाधिकारों के समान स्तर चाहते हैं, तो आप AUTHID DEFINER का उपयोग करते हैं। यदि आप ओरेकल को वर्तमान में संग्रहीत प्रक्रिया चलाने वाले उपयोगकर्ता के विशेषाधिकारों का उपयोग करना चाहते हैं, तो आप AUTHID CURRENT_USER का उपयोग करना चाहते हैं। प्रक्रिया घोषणा निम्नानुसार दिखती है:
CREATE OR REPLACE PROCEDURE usp_dropTable(schema VARCHAR, tblToDrop VARCHAR)
AUTHID CURRENT_USER IS
BEGIN
DECLARE v_cnt NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_cnt
FROM all_tables
WHERE owner = schema
AND table_name = tblToDrop;
IF v_cnt > 0 THEN
EXECUTE IMMEDIATE('DROP TABLE someschema.some_table PURGE');
END IF;
END;
END;
प्रतिक्रिया देने के लिए सभी को धन्यवाद। समाधान पाने के लिए यह निश्चित रूप से बहुत परेशान करने वाली समस्या थी।
मैं इसी तरह की समस्या का सामना करना पड़ रहा था, लेकिन अजीब बात यह है कि 'AUTHID Definer' या 'AUTHID CURRENT_USER' का उपयोग किए बिना प्रक्रिया ड्रॉप तालिका के लिए क्रियान्वित किया गया है कथन लेकिन तालिका बनाने के लिए नहीं। AUTHID समाधान काम करता है :) धन्यवाद! – Aniket
धन्यवाद, यह दो शब्द "AUTHID CURRENT_USER" मेरी समस्या का समाधान! धन्यवाद! – Roman