यह आमतौर पर तब होता है जब एक डेटाबेस या सर्वर से दूसरे में व्यू/ट्रिगर/प्रक्रिया निर्यात करते हैं क्योंकि उस ऑब्जेक्ट को बनाने वाले उपयोगकर्ता अब मौजूद नहीं हैं।
आपके पास दो विकल्प हैं:
<एच3>1. परिभाषा बदलें
किसी भी DEFINER
. को हटाकर, प्रारंभ में अपने डेटाबेस ऑब्जेक्ट को आयात करते समय ऐसा करना संभवतः सबसे आसान है डंप से बयान।
परिभाषा को बाद में बदलना थोड़ा मुश्किल है:
दृश्यों के लिए निश्चित कैसे बदलें
-
आवश्यक ALTER स्टेटमेंट जेनरेट करने के लिए इस SQL को चलाएँ
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
ALTER कथनों की प्रतिलिपि बनाएँ और चलाएँ
संग्रहीत कार्यविधियों के लिए निश्चित कैसे बदलें
उदाहरण:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
सावधान रहें, क्योंकि यह सभी डेटाबेस के लिए सभी परिभाषाओं को बदल देगा।
<एच3>2. लापता उपयोगकर्ता बनाएं <ब्लॉकक्वॉट>यदि आपको MySQL डेटाबेस का उपयोग करते समय निम्न त्रुटि मिलती है:
The user specified as a definer ('someuser'@'%') does not exist`
फिर आप इसे निम्नलिखित का उपयोग करके हल कर सकते हैं:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
http://www से .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
यह एक आकर्षण की तरह काम करता है - आपको केवल someuser
को बदलना होगा लापता उपयोगकर्ता के नाम पर। स्थानीय देव सर्वर पर, आप आमतौर पर केवल root
. का उपयोग कर सकते हैं ।
यह भी विचार करें कि क्या आपको वास्तव में उपयोगकर्ता को ALL
प्रदान करने की आवश्यकता है अनुमतियाँ या वे कम के साथ क्या कर सकते हैं।