MySQL account names consist of a user name and a host name. This enables creation of accounts for users with the same name who can connect from different hosts. This section describes how to write account names, including special values and wildcard rules.
In SQL statements such as CREATE
USER, GRANT, and
SET PASSWORD, write account names
using the following rules:
Syntax for account names is
'.
user_name'@'host_name'
An account name consisting only of a user name is equivalent
to
'.
For example, user_name'@'%''me' is equivalent to
'me'@'%'.
The user name and host name need not be quoted if they are
legal as unquoted identifiers. Quotes are necessary to specify
a user_name string containing
special characters (such as
“-”), or a
host_name string containing special
characters or wildcard characters (such as
“%”); for example,
'test-user'@'%.com'.
Quote user names and host names as identifiers or as strings,
using either backticks (“`”),
single quotation marks (“'”),
or double quotation marks
(“"”).
The user name and host name parts, if quoted, must be quoted
separately. That is, write
'me'@'localhost', not
'me@localhost'; the latter is interpreted
as 'me@localhost'@'%'.
A reference to the
CURRENT_USER() (or
CURRENT_USER) function is
equivalent to specifying the current user's name and host name
literally.
MySQL stores account names in grant tables in the
mysql database using separate columns for the
user name and host name parts:
The user table contains one row for each
account. The User and
Host columns store the user name and host
name. This table also indicates which global privileges the
account has.
Other grant tables indicate privileges an account has for
databases and objects within databases. These tables have
User and Host columns to
store the account name. Each row in these tables associates
with the account in the user table that has
the same User and Host
values.
For additional detail about grant table structure, see Section 5.4.2, “Privilege System Grant Tables”.
User names and host names have certain special values or wildcard conventions, as described following.
A user name is either a nonblank value that literally matches the
user name for incoming connection attempts, or a blank value
(empty string) that matches any user name. An account with a blank
user name is an anonymous user. To specify an anonymous user in
SQL statements, use a quoted empty user name part, such as
''@'localhost'.
The host name part of an account name can take many forms, and wildcards are permitted:
A host value can be a host name or an IP address. The name
'localhost' indicates the local host. The
IP address '127.0.0.1' indicates the
loopback interface. For the local host, the host value can be
the IPv6 address '::1', which indicates the
IPv6 loopback interface.
You can use the wildcard characters
“%” and
“_” in host values. These have
the same meaning as for pattern-matching operations performed
with the LIKE operator. For
example, a host value of '%' matches any
host name, whereas a value of '%.mysql.com'
matches any host in the mysql.com domain.
'192.168.1.%' matches any host in the
192.168.1 class C network.
Because you can use IP wildcard values in host values (for
example, '192.168.1.%' to match every host
on a subnet), someone could try to exploit this capability by
naming a host 192.168.1.somewhere.com. To
foil such attempts, MySQL disallows matching on host names
that start with digits and a dot. Thus, if you have a host
named something like 1.2.example.com, its
name never matches the host part of account names. An IP
wildcard value can match only IP addresses, not host names.
For a host value specified as an IP address, you can specify a
netmask indicating how many address bits to use for the
network number. This applies only for IPv4 addresses, not IPv6
addresses. The syntax is
.
For example:
host_ip/netmask
CREATE USER 'david'@'192.58.197.0/255.255.255.0';
This enables david to connect from any
client host having an IP address
client_ip for which the following
condition is true:
client_ip&netmask=host_ip
That is, for the CREATE USER
statement just shown:
client_ip & 255.255.255.0 = 192.58.197.0
IP addresses that satisfy this condition and can connect to
the MySQL server are those in the range from
192.58.197.0 to
192.58.197.255.
The netmask can only be used to tell the server to use 8, 16, 24, or 32 bits of the address. Examples:
192.0.0.0/255.0.0.0: Any host on the
192 class A network
192.168.0.0/255.255.0.0: Any host on
the 192.168 class B network
192.168.1.0/255.255.255.0: Any host on
the 192.168.1 class C network
192.168.1.1: Only the host with this
specific IP address
The following netmask will not work because it masks 28 bits, and 28 is not a multiple of 8:
192.168.0.1/255.255.255.240

User Comments
Add your own comment.