उन सभी उपयोगकर्ताओं को कैसे पता चलेगा जो डेटाबेस (MySQL) तक पहुंच सकते हैं?


19

सभी उपयोगकर्ताओं को कैसे पता चलेगा जो डेटाबेस तक पहुंच सकते हैं?

जवाबों:


14

Mysql उदाहरण के लिए एक व्यवस्थापक उपयोगकर्ता (आमतौर पर रूट के रूप में) से कनेक्ट करें और निम्न कमांड दें ...

select user from mysql.db where db='DB_NAME';

मैंने इसे एक लाइव मारियाडीबी (MySQL कांटा) के खिलाफ चलाया और इसने 2 रिक्त पंक्तियों को वापस किया।
क्रिस एस

1
आपके डेटाबेस का नाम क्या है? आपको अपने DB के नाम से "DB_NAME" को बदलना होगा।
user79644

select user from mysql.dbबिना योग्यता के दौड़ना 2 खाली पंक्तियों को भी लौटाता है।
क्रिस एस

यह निश्चित नहीं है कि मारियाडीबी और माईएसक्यूएल के बीच क्या अंतर हैं, लेकिन यह क्वेरी मानक MySQL 5 स्थापना पर अपेक्षित है।
rvf

यह ओपी के जवाब का केवल एक हिस्सा है। Mysql.user.db फ़ील्ड में वाइल्डकार्ड वर्ण हो सकते हैं जो कई डेटाबेस से मेल खाते हैं। आपकी प्रस्तावित क्वेरी का उपयोग करने से उन्हें याद किया जाता है। dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

10

user79644 का उत्तर उपयोगकर्ताओं को डेटाबेस-स्तरीय विशेषाधिकारों के साथ मिलता है, लेकिन केवल तालिका-स्तर, स्तंभ-स्तर या प्रक्रिया-स्तरीय विशेषाधिकारों के साथ उपयोगकर्ताओं को याद करेंगे। उन सभी को खोजने के लिए, निम्नलिखित कथनों का उपयोग करें:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

MySQL 5.5 में कम से कम, ऐसा लगता है जैसे स्तंभ-स्तरीय विशेषाधिकार होने का अर्थ है कि आपके पास तालिका-स्तरीय विशेषाधिकार हैं। तालिका-स्तरीय विशेषाधिकार होने का अर्थ यह नहीं है कि आपके पास डेटाबेस-स्तर के विशेषाधिकार हैं। प्रक्रिया-स्तरीय विशेषाधिकारों के बारे में निश्चित नहीं है।


1
यह उत्तर का केवल एक हिस्सा है। Mysql.user.db फ़ील्ड में वाइल्डकार्ड वर्ण हो सकते हैं जो कई डेटाबेस से मेल खाते हैं। आपकी प्रस्तावित क्वेरी का उपयोग करने से उन्हें याद किया जाता है। dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

कौन सा डेटाबेस? मुझे मिल रहा हैERROR 1046 (3D000): No database selected
user124384

@ user124384 उत्तर में क्या नहीं कहा गया है कि आपको mysqlडेटाबेस का उपयोग करना चाहिए । यहीं से MySQL द्वारा उपयोग किया जाने वाला सारा डेटा स्टोर किया जाता है। या तो USE mysql;डेटाबेस नामों को तालिका नामों में जोड़ने की आज्ञा दें , जैसे किFROM mysql.dbFROM mysql.tables_priv
जिप्सी स्पेलवेवर

8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;

2
शो अनुदान केवल करंट का अनुदान दिखाता है (लॉग इन) उपयोगकर्ता
nl-x

रूट के रूप में आप भी के लिए शो अनुदान कर सकते हैं
रोवन हॉकिन्स

2

आपको यह ध्यान रखना होगा कि डेटाबेस के लिए MySQLGRANT में वाइल्डकार्ड वर्ण हो सकते हैं । इसका उपयोग LIKEप्रश्न में किया जाना है:

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.