As you said, in MySQL
USAGE is synonymous with "no privileges". From the MySQL Reference Manual:
The USAGE privilege specifier stands for "no privileges." It is used at the global level with GRANT to modify account attributes such as resource limits or SSL characteristics without affecting existing account privileges.
USAGE is a way to tell MySQL that an account exists without conferring any real privileges to that account. They merely have permission to use the MySQL server, hence
USAGE. It corresponds to a row in the
mysql`.`user table with no privileges set.
IDENTIFIED BY clause indicates that a password is set for that user. How do we know a user is who they say they are? They identify themselves by sending the correct password for their account.
A user's password is one of those global level account attributes that isn't tied to a specific database or table. It also lives in the
mysql`.`user table. If the user does not have any other privileges
ON *.*, they are granted
USAGE ON *.* and their password hash is displayed there. This is often a side effect of a
CREATE USER statement. When a user is created in that way, they initially have no privileges so they are merely granted