MySQL उपयोगकर्ताओं के लिए होस्ट अनुमतियाँ बदलना


44

मेरे पास उपयोगकर्ता / डेटाबेस के लिए निम्नलिखित अनुदान हैं

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

डेटाबेस तक बाहरी पहुंच को सक्षम करने के लिए, मुझे लोकलहोस्ट को बदलने की आवश्यकता है %। ऐसा करने का एक तरीका REVOKEसभी अनुमतियाँ हैं और इसे फिर से सेट करें। समस्या यह है, कि एक पासवर्ड सेट है जो मुझे नहीं पता है, इसलिए यदि मैंने अनुमति रद्द कर दी है, तो मैं इसे वापस सेट नहीं कर सकता।

क्या बिना अनुमति के खुद को रद्द किए बिना होस्टनाम localhostको %(और फिर से) बदलने का एक तरीका है?

जवाबों:


59

यदि आपने mysqlडेटाबेस तक पहुँच प्राप्त कर ली है, तो आप अनुदान तालिकाएँ सीधे बदल सकते हैं:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

... और UPDATEइसे वापस बदलने के लिए एक अनुरूपता।

साथ ही आपको mysql.dbतालिका में भी बदलाव करने की आवश्यकता हो सकती है :

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

थोड़ा ठीक (mysql सर्वर संस्करण: 5.7.5-m15 - MySQL सामुदायिक सर्वर): दोनों phpmyadmin से और साथ ही mysql कमांड प्रॉम्प्ट - UPDATE mysqluserसेट Host= 'लोकलहोस्ट' जहां userHost= '%' और userUser= 'XXXdbusr';
जादेय

1
उत्पादन डेटाबेस के लिए, मैं% के साथ सावधान रहूंगा, यह एक सुरक्षा जोखिम हो सकता है। यदि आपके पास कई वेबसर्वर हैं, तो आप '192.168.0।%', या ''% .example.com '' जैसे वाइल्डकार्ड होस्ट का भी उपयोग कर सकते हैं। एक अन्य विकल्प प्रत्येक होस्ट के लिए एक ही उपयोगकर्ता को कई बार जोड़ना है, या प्रति वेबसर्वर के लिए एक अलग नाम वाला उपयोगकर्ता बनाना है।
Fx32

अगर, मेरी तरह, एक स्थानीय परीक्षण मशीन (मेरे मामले पर RasPi) पर रूट का उपयोग करने की अनुमति देने की कोशिश की, यह MySQL 5.7 के बाद से काम नहीं करेगा। इस सूत्र को
राउल पिंटो

@RaPPinto: यह धागा phpMyAdmin के बारे में प्रतीत होता है, जो यहां पूरी तरह से प्रासंगिक नहीं है, लेकिन केवल उन लोगों के लिए ध्यान देने योग्य है जो केवल इसका उपयोग करते हैं।
निकरिम

बेहतर दस्तावेज वाले कथन का उपयोग करने के लिए बेहतर है RENAME USER
एंटोनियो बर्दाज़ी

6

Stackoverflow पर सबसे अच्छा जवाब RENAME USERजो उपयोगकर्ता विशेषाधिकार की नकल करने का उपयोग करने का सुझाव देता है ।

डेटा कंट्रोल लैंग्वेज (GRANT, REVOKE, RENAME वगैरह के रूप में स्टेटमेंट्स) का उपयोग करने की आवश्यकता नहीं है FLUSH PRIVILEGES;और गैलरा या समूह प्रतिकृति जैसी वास्तुकला में आवश्यक है जहां MyISAM तालिकाओं को दोहराया नहीं जाता है।


2

मैं इस एक के पार भी ठोकर खाई, और प्रस्तावित समाधान काम नहीं किया, क्योंकि डेटाबेस विशिष्ट विशेषाधिकार के रूप में अच्छी तरह से स्थानांतरित नहीं किया जाएगा। मैंने क्या किया:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

और "यह" काम किया?
पियरे.विरेंस

1

विशेषाधिकार बदलने के लिए, पहले उपयोगकर्ता को सभी अनुमति रद्द करें

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

वास्तव में मेरी समस्या यही है, मैं पासवर्ड की वजह से अनुमति रद्द नहीं कर सकता। कृपया मेरा प्रश्न पढ़ें।
फुरी

आप पासवर्ड हैश को अपडेट के जरिए पुराने के समान सेट कर सकते हैं। ऐसा करने के लिए आपको वास्तविक पासवर्ड जानने की आवश्यकता नहीं है।
ड्रगार्ट

0

यदि आपके पास डीबी (जैसे टेबल या कॉलम आदि) के अलावा अन्य विशेषाधिकार हैं, तो बहुत सारी तालिकाओं को मिस करना। आपके उपयोगकर्ता के पास क्या अनुदान है, इसके आधार पर, आपको इन सभी तालिकाओं या कुछ को अद्यतन करने की आवश्यकता हो सकती है:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.