# 用户和权限管理
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 。例如 [email protected] 。
在设置用户的权限时,如果没有特别指定是他从“哪台”电脑上登录时的权限,那么就使用 % 表示其从任何电脑上登录时的权限,即 用户名 等同于 用户名@%,这里的 % 表示所有电脑。
为设置权限,使用 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 用户名;