版本8.0
MySQL 8.0参考手册 / ... / 添加用户帐户
6.3.2添加用户帐户
要创建MySQL帐户,请使用用于创建帐户和建立其权限的帐户管理语句,例如CREATE USER和 GRANT。这些语句使服务器对基础授权表进行适当的修改。所有这些陈述在 第13.7.1节“帐户管理声明”中描述。
注意
使用诸如,或者 不鼓励的语句直接修改授权表 INSERT, 并且风险自负。服务器可以自由忽略由于此类修改而变得格式错误的行。 UPDATEDELETE
对于修改授权表的任何操作,服务器检查表是否具有预期结构,否则生成错误。必须运行mysql_upgrade才能将表更新为预期的结构。
创建帐户的另一个选择是使用GUI工具MySQL Workbench。此外,一些第三方程序提供MySQL帐户管理功能。phpMyAdmin
是一个这样的计划。
以下示例显示如何使用 mysql客户端程序设置新帐户。这些示例假定已根据第2.9.4节“保护初始MySQL帐户”中所述的缺省值设置了特权。这意味着要进行更改,您必须以root拥有该CREATE USER权限的MySQL 用户 身份连接到MySQL服务器。
首先,使用mysql程序以MySQL root用户身份连接到服务器:
shell> mysql --user=root mysql
如果您已为root 帐户指定了密码,则还必须提供--password或 -p选项。
连接到服务器后root,您可以添加新帐户。以下示例使用 CREATE USER 和 GRANT语句设置四个帐户:
mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost'
-> WITH GRANT OPTION;
mysql> CREATE USER 'finley'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'%'
-> WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';
这些语句创建的帐户具有以下属性:
- 两个帐户的用户名为
finley
。两者都是具有完全权限的超级用户帐户。'finley'@'localhost'
只有从本地主机连接时才能使用该帐户。该'finley'@'%'
帐户使用'%'
通配符作为主机部分,因此可用于从任何主机进行连接。'finley'@'localhost'
如果有匿名用户帐户,则 该帐户是必需的localhost
。如果没有该'finley'@'localhost'
帐户,finley
则从本地主机连接时该匿名用户帐户优先 ,finley
并被视为匿名用户。原因是匿名用户帐户具有Host
比'finley'@'%'帐户更具体的列值 ,因此在user表格排序顺序中更早出现。(user表格排序将在 第6.2.6节“访问控制,第1阶段:连接验证”中讨论。) - 该'admin'@'localhost'帐户只能用于admin从本地主机进行连接。它被授予RELOAD 和PROCESS管理权限。这些特权使 admin用户能够执行 mysqladmin reload,mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。没有授予访问任何数据库的权限。您可以使用GRANT 语句添加此类权限。
- 该'dummy'@'localhost'帐户没有密码(这是不安全的,不推荐)。此帐户只能用于从本地主机进行连接。没有授予任何特权。假设您将使用GRANT语句向帐户授予特定权限 。
要查看帐户的权限,请使用 SHOW GRANTS:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------+
| GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' |
+-----------------------------------------------------+
要查看帐户的非特权属性,请使用 SHOW CREATE USER:
mysql> SHOW CREATE USER 'admin'@'localhost'\G
*************************** 1. row *************************** CREATE USER for admin@localhost: CREATE USER 'admin'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*67ACDEBDAB923990001F0FFB017EB8ED41861105' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK
下一个示例创建三个帐户并授予他们访问特定数据库的权限。他们每个人的用户名 custom
和密码为 password
:
mysql> CREATE USER 'custom'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO 'custom'@'localhost';
mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'password';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO 'custom'@'host47.example.com';
mysql> CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO 'custom'@'%.example.com';
这三个帐户可以使用如下:
- 第一个帐户可以访问
bankaccount
数据库,但只能访问 本地主机。 - 第二个帐户可以访问
expenses
数据库,但只能访问主机host47.example.com
。 - 第三个帐户可以
customer
从example.com
域中的任何主机访问数据库。由于%
在帐户名称的主机部分中使用通配符,因此该帐户可以访问域中的所有计算机。