MySQL identifikuje uživatele JAK podle uživatelského jména, tak podle hostitele. Když MySQL provádí autentizaci při přihlášení, MySQL nejprve hledá název hostitele, který se přesně shoduje. Pokud nenajde přesnou shodu, pak hledá hostitele obsahujícího zástupný znak '%'.
Když jste provedli GRANT ... TO [email protected]
, MySQL vytvořilo nového uživatele (bez hesla, protože neexistoval žádný IDENTIFIED BY
uvedené v prohlášení.
Co se stalo, když jste se pokusili přihlásit jako myuser
z localhost se mysqld pokusil najít záznam, který odpovídá 'myuser'@'localhost'
v tabulce mysql.user a našel to. A relace získala oprávnění přiřazená tomuto uživateli.
(Abych byl trochu přesnější, mysqld se ve skutečnosti nedívá na obsah tabulky mysql.user, co ve skutečnosti vypadá na strukturu v paměti, která byla naplněna z tabulky, když byla sestavena. Přestavba tabulky struktura paměti je spuštěna příkazem GRANT, REVOKE nebo FLUSH PRIVILEGES.)
Co se dělo PŘEDtím, než jste přidali tohoto nového uživatele, mysqld hledal přesnou shodu uživatele a názvu hostitele a nenašel. Ale našel záznam se zástupným znakem '%', takže tomu odpovídal, takže relace získala všechna oprávnění udělená uživateli 'myuser'@'%'.
Dva uživatelé 'u'@'%'
a 'u'@'localhost'
jsou oddělené a navzájem odlišné. Oprávnění musí být uděleno každému uživateli individuálně. Jakákoli oprávnění udělená uživateli 'u'@'%'
platí POUZE pro tohoto uživatele a NE pro 'u'@'localhost'
.