MySQL उपयोगकर्ता नाम और होस्ट दोनों द्वारा उपयोगकर्ता की पहचान करता है। जब MySQL लॉगिन पर प्रमाणीकरण करता है, तो MySQL पहले एक ऐसे होस्टनाम की तलाश करता है जो एक सटीक मिलान हो। यदि उसे सटीक मिलान नहीं मिलता है, तो वह '%' वाइल्डकार्ड वाले होस्ट की तलाश करता है।
जब आपने GRANT ... TO example@sqldat.com , MySQL ने एक नया उपयोगकर्ता बनाया (बिना पासवर्ड के, क्योंकि कोई IDENTIFIED BY नहीं था। बयान में दिया गया है।
फिर क्या हुआ, जब आपने myuser . के रूप में लॉगिन करने का प्रयास किया लोकलहोस्ट से, mysqld ने 'myuser'@'localhost' से मेल खाने वाली प्रविष्टि खोजने की कोशिश की mysql.user तालिका में और इसे मिला। और सत्र को उस उपयोगकर्ता को सौंपे गए विशेषाधिकार मिल गए।
(थोड़ा और सटीक होने के लिए, mysqld वास्तव में mysql.user तालिका की सामग्री को नहीं देखता है, यह वास्तव में इन-मेमोरी संरचना को क्या देखता है, जिसे तालिका से बनाया गया था जब इसे बनाया गया था। का पुनर्निर्माण मेमोरी स्ट्रक्चर को GRANT, REVOKE या FLUSH PRIVILEGES स्टेटमेंट द्वारा ट्रिगर किया जाता है।)
आपके द्वारा उस नए उपयोगकर्ता को जोड़ने से पहले क्या हो रहा था, mysqld उपयोगकर्ता और होस्टनाम पर सटीक मिलान की तलाश में था, और उसे कोई नहीं मिला। लेकिन इसे '%' वाइल्डकार्ड के साथ एक प्रविष्टि मिली, इसलिए यह उससे मेल खाता था, इसलिए सत्र को 'myuser'@'%' उपयोगकर्ता को सभी विशेषाधिकार दिए गए।
दो उपयोगकर्ता 'u'@'%' और 'u'@'localhost' एक दूसरे से अलग और अलग हैं। प्रत्येक उपयोगकर्ता को व्यक्तिगत रूप से विशेषाधिकार दिए जाने चाहिए। 'u'@'%' . को दिया गया कोई भी विशेषाधिकार केवल उस उपयोगकर्ता पर लागू करें न कि 'u'@'localhost' . पर लागू करें .