# 用户和权限管理

MySQL 是一个多用户数据库管理系统,除了默认存在的 root 用户外可以额外地在创建用户,设置密码,并指定新用户对数据库的操作权限。

以上所说操作依赖于超级管理员账户 root ,即只有 root 账户才能执行上述所说操作。

# 1. 用户管理

使用 CREATE USER 语句可以创建新账户。

CREATE USER 用户名 IDENTIFIED BY '密码';

注意

不要使用其它的、间接的方式来创建型账户。

如果需要删除已有用户账户,使用 DROP USER 语句:

DROP USER 用户名;

如果需要修改已有用户账户的密码,使用 SET PASSWORD 语句:

SET PASSWORD FOR 用户名=PASSWORD('新密码');

# 2. 访问权限管理

在新建用户后必须分配访问权限,因为『用户账号』和『访问权限』是两个独立的概念:

  • 用户账号决定是否可以连接、登陆数据库;
  • 访问权限决定了能对数据库做哪些操作。

因此,纯粹的新用户逻辑上没有任何使用价值(他们可以登录、连接到 MySQL,但不能进行任何数据库操作)。

在进行权限判断、控制时,MySQL 可以细化到设置用户从 A 电脑登陆的时候有某种权限,从 B 电脑登陆时又是其他的权限。因为,它使用『用户名』和『主机名』来认定用户身份 user@host 。例如 tom@192.168.1.110

在设置用户的权限时,如果没有特别指定是他从“哪台”电脑上登录时的权限,那么就使用 % 表示其从任何电脑上登录时的权限,即 用户名 等同于 用户名@%,这里的 % 表示所有电脑。

为设置权限,使用 GRANT 语句,GRANT 要求你至少给出以下信息:

  • 要授予的权限
  • 要被授予访问权限的数据库或表
  • 用户名
GRANT 权限1, 权限2, ... ON 数据库.TO 用户名;

数据库.表名 部分可以使用通配符 *A.* 表示 A 数据库下的所有表。*.* 表示所有数据库中的所有表。

常见权限 说明
ALL 所有权限
SHOW DATABASES 允许使用 SHOW DATABASES 语句
CREATE 允许使用 CREATE TABLE 语句
DROP 允许使用 DROP TABLE 语句
INSERT 允许使用 INSERT 语句
DELETE 允许使用 DELETE 语句
UPDATE 允许使用 UPDATE 语句
SELECT 允许使用 SELECT 语句
USAGE 无访问权限

GRANT 操作的反向操作是 REVOKE,用它来剥夺特定的权限:

REVOKE 权限1, 权限2, ... ON 数据库.表名 FROM 用户名;