2009-12-16 16 views
49

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

मैं एक आंतरिक नेटवर्क वाइल्डकार्ड फिट करने के लिए प्रत्येक उपयोगकर्ता खाते के होस्ट हिस्से को चलाने और संशोधित करने के लिए एक त्वरित और आसान (जितना संभव हो सके स्वचालित) तरीका चाहता हूं। उदाहरण के लिए:

'bugsy' @ 'internalfoo' में 'bugsy' डीबी तक पहुंच है।

मैं अब आंतरिक नेटवर्क

'bugsy'@'10.0.0.%' 'Bugsy' डीबी तक पहुँच गया है पर कहीं से भी Bugsy उपयोग की अनुमति चाहते हैं।

+1

मुझे आश्चर्य है कि अगर serverfault.com पर अधिक भाग्य होगा –

+0

धन्यवाद टी.जे. मैं serverfault.com को भी चेकआउट करूँगा (इसके बारे में नहीं पता था!) ​​ –

+0

अब जब आपने यह प्रश्न पोस्ट किया है, तो मैं इसे यहां बंद करने का सुझाव देता हूं। यह वास्तव में प्रोग्रामिंग से संबंधित नहीं है, सर्वर सर्वर पर बहुत अधिक है। –

उत्तर

100

संदर्भ के लिए, समाधान है:

UPDATE mysql.user SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root'; 
UPDATE mysql.db SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root'; 
FLUSH PRIVILEGES; 
+0

अच्छा सौदा! (और हाँ, इसे मूल टिप्पणी के उत्तर के रूप में पोस्ट करने के लिए बेहतर है। मुझे उस समय आपकी टिप्पणी याद आई ...) –

+3

यह सभी विशेषाधिकारों को सही ढंग से फिर से असाइन नहीं करता है, नीचे दिए गए @pedrocheckos उत्तर सही ढंग से आवश्यक कार्रवाई करता है। –

1

मैं ऐसा करते हैं, तो एक अलग नज़रिए और "परीक्षण, परीक्षण, परीक्षण" का एक बड़ा मदद के साथ इस लेने के लिए नहीं था।

अगर (एक सुरक्षित नियंत्रित परीक्षण परिवेश में) आप सीधे Host स्तंभ mysql.user और शायद mysql.db तालिकाओं में संशोधित क्या होता है? (उदा।, update कथन के साथ।) मुझे नहीं लगता कि MySQL पासवर्ड एन्कोडिंग के हिस्से के रूप में उपयोगकर्ता के होस्ट का उपयोग करता है (PASSWORD फ़ंक्शन यह सुझाव नहीं देता है), लेकिन आपको यह सुनिश्चित करने के लिए प्रयास करना होगा। आपको FLUSH PRIVILEGES कमांड जारी करना पड़ सकता है (या सर्वर को रोकें और पुनरारंभ करें)।

कुछ स्टोरेज इंजन (उदाहरण के लिए, MyISAM) के लिए, आपको .frm फ़ाइल को उपयोगकर्ता द्वारा बनाए गए किसी भी दृश्य को जांच/संशोधित करने की आवश्यकता हो सकती है। .frm फ़ाइल निश्चित होस्ट के समेत निश्चित स्टोर करती है। (मैं यह करने के लिए किया था है, जब मेजबान के बीच डेटाबेस जहां किसी संरूपण गलत मेजबान के कारण दर्ज किया जा वहाँ गया था ... आगे बढ़)

+0

आपके उत्तर के लिए धन्यवाद टी.जे. मैंने mysql.user और mysql दोनों के लिए उपयोगकर्ता रिकॉर्ड को संशोधित करने का प्रयास किया।डीबी और हालांकि परिवर्तनों को ठीक से निष्पादित किया गया था, फिर भी मैं मूल होस्ट के अलावा आंतरिक नेटवर्क पर किसी भी मेजबान से कनेक्ट नहीं कर सकता जिसे उपयोगकर्ता को एक्सेस की अनुमति थी। मुझे यकीन नहीं है कि .frm फ़ाइलों को संशोधित करने के लिए कैसे (वे बाइनरी हैं) ... मुझे लगता है कि आप mysql/निर्देशिका में हैं (और लागू डीबी जिसमें उपयोगकर्ता तक पहुंच है)। हालांकि मैं सीधे फाइलों में चकित होने में संकोच करता हूं। क्या MySQL में ऐसा करने का कोई समर्थित तरीका नहीं है? ऐसा लगता है कि यह छोटा-सा दिखता है। –

+0

टेबल बदलने के बाद, मुझे उम्मीद है कि आपको 'फ्लश प्राइवेट्स' कमांड निष्पादित करने की आवश्यकता है (http://dev.mysql.com/doc/refman/5.0/en/flush.html देखें) या, ज़ाहिर है, रुको और शुरू करें सेवा। 'Frm' फ़ाइलों के बारे में मैं बात कर रहा हूं डेटाबेस में विचारों के लिए होगा, और इसलिए डेटाबेस उपनिर्देशिका में होगा। जिन मैसाइज़ स्टोरेज इंजन के लिए मैं परिवार हूं, वे सादा पाठ हैं; YMMV। –

+0

"familiary"? मेरे टाइपिंग कौशल वास्तव में बिगड़ गए हैं ...; –

4

अधिक सामान्य उत्तर

UPDATE mysql.user SET host = {newhost} WHERE user = {youruser} 
54

स्वीकृत उत्तर केवल उपयोगकर्ता का नाम बदल गया लेकिन विशेषाधिकार पीछे छोड़ दिए गए।

मैं का उपयोग कर की सलाह देते हैं:

RENAME USER 'foo'@'1.2.3.4' TO 'foo'@'1.2.3.5'; 

MySQL documentation के अनुसार:

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

+0

मुझे 'ERROR 1396 (HY000) मिल रहा है: ऑपरेशन RENAME USER 'foo' @ '%' के लिए विफल रहा –

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