MySQL में कमांड लाइन का उपयोग करके उपयोगकर्ता खातों की सूची कैसे प्राप्त करें?


1348

मैं MySQL कमांड लाइन उपयोगिता का उपयोग कर रहा हूं और डेटाबेस के माध्यम से नेविगेट कर सकता हूं। अब मुझे उपयोगकर्ता खातों की एक सूची देखने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?

मैं MySQL संस्करण का उपयोग कर रहा हूं 5.4.1


@ मुस्तफा शीर्षक क्यों बदला? यह उत्तर यहां SQL हैं जो आप कहीं से भी चला सकते हैं, केवल एक कमांड लाइन नहीं। और यह टैग प्रश्न में क्या जोड़ता है?
Rup

मेरे संपादन का उद्देश्य शीर्षक और विवरण के बीच निरंतरता बनाए रखना था, लेकिन मुझे लगता है कि आपके पास एक अच्छा बिंदु है। अपना संपादन करें श्री @ रूप
मुस्तफा हदीद

जवाबों:


1848

इस क्वेरी का उपयोग करें:

SELECT User FROM mysql.user;

जो इस तरह से एक तालिका का उत्पादन करेगा:

+-------+
| User  |
+-------+
| root  |
+-------+
| user2 |
+-------+

जैसा कि मैथ्यू शार्ले इस उत्तर पर टिप्पणियों में बताते हैं , Userयदि आप केवल अनन्य उपयोगकर्ता नाम देखना चाहते हैं, तो आप कॉलम द्वारा समूह कर सकते हैं।


47
मुझे लगता है कि समूह के लिए Userभी आवश्यक हो सकता है , केवल अनन्य उपयोगकर्ता मान प्राप्त करने के लिए, क्योंकि प्रत्येक user@ hostप्रविष्टि के लिए अलग पंक्ति है ।
मैथ्यू शार्ले

5
कैसे sql क्वेरी के बिना एक ही जानकारी खोजने के लिए ??
दिव्यांशु दास

8
@barrycarter DELETE FROM mysql.user;बेहतर है WHERE user='someuser' and host='somehost';यदि आप करते हैं DELETE FROM mysql.user;, तो सभी उपयोगकर्ता चले गए हैं। अगले mysql को फिर से शुरू करने या FLUSH PRIVILEGES;मेमोरी से उपयोगकर्ताओं को समाप्त करने के बाद लॉगिन करें । यहां DELETE FROM mysql.userजिम्मेदारी से करने पर मेरी एक पोस्ट का एक उदाहरण है : dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA

3
@GeoffreySHOW GRANTS FOR 'user'@'host';
फैंसपैंट

5
समूहीकरण के बजाय आप केवल DISTINCTकीवर्ड का उपयोग कर सकते हैं :SELECT DISTINCT user FROM mysql.user;
user2683246

445

मुझे यह प्रारूप सबसे उपयोगी लगता है क्योंकि इसमें होस्ट फ़ील्ड शामिल है जो उपयोगकर्ता रिकॉर्ड के बीच अंतर करने के लिए MySQL में महत्वपूर्ण है।

select User,Host from mysql.user;

1
बस उत्सुक। यह hostmysql डेटाबेस के साथ काम करते समय कब आएगा? [
मैसकॉल

7
hostजब आप किसी भिन्न सर्वर से कनेक्ट कर रहे हों तो @Packer खेलने में आता है। अलग-अलग पहुंच प्रदान करना संभव है 'packer'@'example.com'और'packer'@'google.com'
रे बैक्सटर

118

उपयोगकर्ता खाते में उपयोगकर्ता नाम और होस्ट स्तर की पहुंच शामिल है।

इसलिए, यह क्वेरी है जो सभी उपयोगकर्ता खाते देता है

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

7
यह मूल रूप से स्पकेन के उत्तर के समान है । उपयोगकर्ता और होस्ट कॉलम को सुगम बनाने का क्या लाभ है?
इयान सैमुअल मैकलीन एल्डर

8
एक उदाहरण: user@hostपासवर्ड सेट करने के लिए प्रारूप का उपयोग किया जाता है। होस्ट को SET PASSWORDकमांड से ओमिट करने में त्रुटि उत्पन्न होती है। SET PASSWORD FOR wordpressuser = PASSWORD('...');त्रुटि पैदा करता है ERROR 1133 (42000): Can't find any matching row in the user table। मेजबान को शामिल करें और यह काम करता है। SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');पैदा करता है Query OK, 0 rows affected (0.00 sec)
इयान सैमुअल मैकलीन एल्डर

3
सबसे अच्छा जवाब, जो भी naysayers के बारे में शिकायत कर सकते हैं। केवल एक चीज जो मैं बदलूंगा, ORDER BY userवह थी उसे जोड़ देना।
sjas

48

जब वे विभिन्न मूल से जुड़ते हैं तो उपयोगकर्ताओं की पुनरावृत्ति से बचने के लिए:

select distinct User from mysql.user;

31

MySQL अपने डेटाबेस में उपयोगकर्ता की जानकारी संग्रहीत करता है। डेटाबेस का नाम है MySQL। उस डेटाबेस के अंदर, उपयोगकर्ता जानकारी एक तालिका में है, एक डेटासेट, जिसका नाम है user। यदि आप देखना चाहते हैं कि उपयोगकर्ता MySQL उपयोगकर्ता तालिका में क्या सेट कर रहे हैं, तो निम्न कमांड चलाएँ:

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+

30

यदि आप वास्तविक MySQL उपयोगकर्ताओं की बात कर रहे हैं, तो कोशिश करें:

select User from mysql.user;

23
SELECT * FROM mysql.user;

यह एक बड़ी तालिका है इसलिए आप चाहते हैं कि आप किन क्षेत्रों का चयन करें।


2
मुझे अलग-अलग होस्ट के साथ 3 रूट उपयोगकर्ता मिले। localhost, 127.0.0.1और ::1। मुझे कौन सा रखना चाहिए और मुझे क्या हटाना चाहिए? धन्यवाद!
भावुकता

4
यदि आप नहीं चाहते कि लोग नेटवर्क से जुड़ें, तो पुराना मानक इन सभी को हटाना था। आजकल, हालांकि, ऐसा लगता है कि सिफारिश स्थानीय लोगों को रखने की है, क्योंकि वे नेटवर्क पर वैसे भी सुलभ नहीं हैं; इसका मतलब है कि आपको इन सभी को रखना चाहिए ।
कोशिश 13

18

रूट के रूप में mysql में लॉगिन करें और क्वेरी के बाद टाइप करें

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+

मैं रूट के रूप में लॉगिंग का उल्लेख करने के लिए +1 कहूंगा। मैंने ऐसा किए बिना कोशिश की और यह काम नहीं किया;)
लेनिफे

उपयोगकर्ता सूची प्रदर्शित करने के लिए आपको user1 को विशेषाधिकार देने की आवश्यकता है। रूट उपयोगकर्ता के बिना आपको त्रुटि मिलेगी। इसलिए पहले विशेषाधिकार प्रदान करें। रूट उपयोगकर्ता के रूप में लॉग इन करें और फिर कमांड टाइप करें GRANT SELECT ON mysql.user TO 'user1'@'localhost'; अब यूजर 1 के रूप में लॉगिन करें और कमांड टाइप करें select User from mysql.user; आपको उपयोगकर्ता सूची दिखाई देगी। :) +1 आनंद
sandip divekar

15

Mysql.db तालिका संभवतः उपयोगकर्ता अधिकारों का निर्धारण करने में अधिक महत्वपूर्ण है। मुझे लगता है कि यदि आप GRANT कमांड में एक तालिका का उल्लेख करते हैं तो इसमें एक प्रविष्टि बनाई जाती है। मेरे मामले में mysql.users तालिका ने उपयोगकर्ता के लिए कोई अनुमति नहीं दी जब वह स्पष्ट रूप से कनेक्ट करने और चयन करने में सक्षम था, आदि।

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...

1
मेरे विचार में जो महत्वपूर्ण है वह वही है जो उपयोगकर्ताओं को डेटाबेस पर करने की अनुमति है। इसलिए "SHOW GRANTS" काफी उपयोगी है क्योंकि यह दिखाता है कि किसको क्या करने की अनुमति है।
डेवलपर Marius ėilėnas 19

12

मैं इसका उपयोग उपयोगकर्ताओं को क्रमबद्ध करने के लिए करता हूं, इसलिए अनुमत होस्ट को स्पॉट करना अधिक आसान है:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;

11

पीटर और जेसी सही हैं, लेकिन सुनिश्चित करें कि आप पहले mysql DB का चयन करें।

use mysql;

select User from mysql.user;

अपनी चाल चलनी चाहिए


22
यह न necessery करने के use mysql;मामले में आप गुंजाइश तालिका mysql डेटाबेस के लिए की तरह तुमने किया था। तुम सिर्फselect User from mysql.user;
vitaLee

5
जोड़ना use mysql;सिर्फ इतना है कि आप select User from user;इसके बजाय select User from mysql.user;इसका उपयोग कर सकते हैं क्योंकि यह आमतौर पर एक बार की क्वेरी है, mysql db का उपयोग करने की कोई आवश्यकता नहीं है
Dan

1
इसके बाद use mysqlअगर आपने इससे कुछ किया select user from user;हो सकता है, लेकिन इसके बजाय आप उपयोग कर रहे हैं mysql.user, जो use mysqlशुरुआत में अनावश्यक उपयोग करता है ।
SAN Sошƒаӽ


5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

लिनक्स कमांड पर इस कमांड को निष्पादित करने से पहले mysql रूट उपयोगकर्ता का पासवर्ड मांगा जाएगा, सही पासवर्ड प्रदान करने पर यह सभी डेटाबेस उपयोगकर्ताओं को पाठ फ़ाइल में प्रिंट करेगा।


3

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

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.