MySQL mengidentifikasi pengguna dengan KEDUA nama pengguna dan host. Ketika MySQL melakukan otentikasi saat login, MySQL pertama-tama mencari nama host yang sama persis. Jika tidak menemukan kecocokan yang tepat, maka ia akan mencari host yang berisi wildcard '%'.
Ketika Anda melakukan GRANT ... TO [email protected]
, MySQL membuat user baru (tanpa password, karena tidak ada IDENTIFIED BY
diberikan dalam pernyataan.
Lalu apa yang terjadi, ketika Anda mencoba masuk sebagai myuser
dari localhost, mysqld mencoba menemukan entri yang cocok dengan 'myuser'@'localhost'
di tabel mysql.user dan menemukannya. Dan sesi mendapatkan hak istimewa yang diberikan kepada pengguna itu.
(Untuk lebih tepatnya, mysqld tidak benar-benar melihat isi tabel mysql.user, apa yang benar-benar terlihat pada struktur dalam-memori, yang diisi dari tabel ketika dibangun. Sebuah pembangunan kembali dari struktur memori dipicu oleh pernyataan GRANT, REVOKE atau FLUSH PRIVILEGES.)
Apa yang terjadi SEBELUM Anda menambahkan pengguna baru itu, mysqld mencari kecocokan yang tepat pada pengguna dan nama host, dan tidak menemukannya. Tapi itu menemukan entri dengan wildcard '%', jadi cocok dengan itu, jadi sesi mendapatkan semua hak istimewa yang diberikan kepada pengguna 'pengguna saya'@'%'.
Kedua pengguna 'u'@'%'
dan 'u'@'localhost'
adalah terpisah dan berbeda satu sama lain. Hak istimewa harus diberikan kepada setiap pengguna secara individual. Hak istimewa apa pun yang diberikan kepada 'u'@'%'
berlaku HANYA untuk pengguna itu dan BUKAN ke 'u'@'localhost'
.