हाँ, डिज़ाइन के अनुसार, एक कर्सर समान SELECT से भिन्न व्यवहार कर सकता है क्वेरी व्यवहार कर सकती है यदि इसे उस उपयोगकर्ता द्वारा निष्पादित किया गया था जिसने प्रक्रिया को बुलाया था।
अगर आप DEFINER निर्दिष्ट नहीं करते हैं जब आप एक संग्रहीत प्रोग्राम (प्रोक, फ़ंक्शन, ट्रिगर, या ईवेंट) या एक दृश्य बनाते हैं, तो ऑब्जेक्ट, जब एक्सेस किया जाता है, तो उस उपयोगकर्ता के विशेषाधिकारों के साथ चलता है जिसने इसे मूल रूप से परिभाषित किया था, न कि उस उपयोगकर्ता के जिसने इसे लागू किया था।
आपके पास यहां तीन विकल्प हैं:
- वर्तमान
DEFINERकी अनुमतियों को सत्यापित या संभावित रूप से संशोधित करें उपयोगकर्ता यदि उपयुक्त हो; या, - एक अलग
DEFINERनिर्दिष्ट करें उपयोगकर्ता संग्रहीत प्रोग्राम या दृश्य को परिभाषित करते समय... आप ऐसा तब तक कर सकते हैं जब तक आप (वस्तु बनाने वाले व्यक्ति) के पासSUPERविशेषाधिकार, और ऑब्जेक्ट का आह्वान (एक्सेस) करने वाले उपयोगकर्ताओं के पास अस्थायी रूप से उसDEFINERके अधिकार होंगे इसके बजाय उपयोगकर्ता; या, SQL SECURITY INVOKERप्रक्रियाओं, कार्यों और विचारों की परिभाषा के लिए (हालांकि ट्रिगर या ईवेंट नहीं), जिसके कारण ऑब्जेक्ट को उस उपयोगकर्ता के विशेषाधिकारों के साथ चलाना पड़ता है, जो इसे लागू करता है, निश्चित के बजाय, जो कि डिफ़ॉल्ट व्यवहार है।
मौजूदा निश्चितकर्ता की अनुमतियों को देखने के लिए, उदाहरण के लिए यदि आप DEFINER=`someguy`@`localhost`:
देखते हैंmysql> SHOW GRANTS FOR 'someguy'@'localhost';
आप SHOW CREATE PROCEDURE procedure_name; के साथ, प्रक्रिया की परिभाषा में वर्तमान निश्चित पा सकते हैं। ।