创建用户

在本教程中,您将学习如何使用MySQL的CREATE USER语句在MySQL中创建一个用户帐户。

MySQL中的用户帐户简介

在MySQL中,不仅可以指定谁可以连接到数据库服务器,还可以指定用户连接的主机。因此,MySQL中的用户帐号由用户名,以及使用@字符分隔的主机名组成。

例如,如果admin用户从localhost主机连接到MySQL数据库服务器,则用户帐户是书写形式是:admin@localhost,其中@符号是一个固定的分隔符。

admin用户只能从本地主机(localhost)连接到MySQL数据库服务器,而不是远程主机(如:yiibai.com),这使得MySQL数据库服务器更加安全。

注意:如要限制admin用户只能从yiibai.com主机登录,那么可以书写为:admin@yiibai.com , 如果想要允许从任意主机登录,那么可以书写为:admin@%

此外,通过组合用户名和主机,可以设置多个具有相同名称的帐户,但可以从具有不同权限的不同主机进行连接。

MySQL将用户帐户授权存储在mysql数据库的user表中。

使用MySQL CREATE USER语句创建用户帐户

MySQL提供了CREATE USER语句,允许您创建一个新的用户帐户。 CREATE USER语句的语法如下:

CREATE USER user_account IDENTIFIED BY password;

用户帐号(user_account)是以username@hostname格式跟在CREATE USER子句之后。

密码(password)在IDENTIFIED BY子句中指定。password必须是明文。 在将用户帐户保存到用户表之前,MySQL将加密明文密码。

例如,要创建一个新的用户dbadmin,这个用户只允许从localhost主机并使用密码为pwd123连接到MySQL数据库服务器,使用CREATE USER语句,如下所示:

CREATE USER dbadmin@localhost 
IDENTIFIED BY 'pwd123';

如果用户dbadmin还可以从IP为192.168.1.100的主机连接到MySQL数据库服务器,使用CREATE USER语句,如下所示:

CREATE USER dbadmin@192.168.1.100 
IDENTIFIED BY 'pwd123';

要查看用户帐户的权限,请使用SHOW GRANTS语句,如下所示:

SHOW GRANTS FOR dbadmin@localhost;

执行上面查询语句,得到以下结果 -

mysql> SHOW GRANTS FOR dbadmin@localhost;
+---------------------------------------------+
| Grants for dbadmin@localhost                |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'dbadmin'@'localhost' |
+---------------------------------------------+
1 row in set

上面结果中的*.*显示dbadmin用户帐户只能登录到数据库服务器,没有其他权限。 要授予用户权限,您可以使用GRANT语句,有关Grant语句,我们将在下一个教程中介绍。

请注意,点(.)之前的部分表示数据库,点(.)后面的部分表示表,例如database.tabletestdb.offices等等。

要允许用户帐户从任何主机连接,请使用百分比(%)通配符,如以下示例所示:

CREATE USER superadmin@'%' IDENTIFIED BY 'mypassword';

百分比通配符%LIKE运算符中使用的效果相同,例如,要允许mysqladmin用户帐户从yiibai.com主机的任何子域连接到数据库服务器,请使用百分比通配符%,如下所示:

CREATE USER mysqladmin@'%.yiibai.com'
IDENTIFIED by 'mypassword';

请注意,也可以在CREATE USER语句中使用下划线通配符_

如果您省略了用户帐户的主机名部分,MySQL也会接受它,并允许用户从任何主机进行连接。 例如,以下语句创建一个名为remote_user的新用户帐户,可以从任何主机连接到数据库服务器:

CREATE USER remote_user;

可以看到授予远程用户帐户(remote_user)的权限如下:

SHOW GRANTS FOR remote_user;

执行上面查询语句,得到以下结果 -

mysql> SHOW GRANTS FOR remote_user;
+-----------------------------------------+
| Grants for remote_user@%                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'remote_user'@'%' |
+-----------------------------------------+
1 row in set

要注意,引用是非常重要的,特别是当用户帐户包含特殊字符(如_%)时。

如果您不小心引用"username@hostname"这样的用户帐户,MySQL将创建一个username@hostname的用户,并允许用户从任何主机进行连接,这可能不是您预期的。

例如,以下语句创建可以从任何主机连接到MySQL数据库服务器的新用户api@localhost(这是用户名,并非用户账号)。

-- 常用创建用户为:CREATE USER api@'localhost' 与下面语句不同
CREATE USER 'api@localhost';

查看上面创建的用户的权限 -

mysql> SHOW GRANTS FOR 'api@localhost';
+-------------------------------------------+
| Grants for api@localhost@%                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'api@localhost'@'%' |
+-------------------------------------------+
1 row in set

如果创建一个已经存在的用户,MySQL会发出一个错误。 例如,以下语句创建一个名为remote_user的用户帐户已经存在:

CREATE USER remote_user;

上面语句执行后,MySQL发出以下错误信息:

1396 - Operation CREATE USER failed for 'remote_user'@'%'

请注意,CREATE USER语句只是创建一个没有任何权限的新用户帐户。如果要向用户授予使用权限,则使用GRANT语句。

Last updated