MySQL 的用户账号信息存储在 mysql
数据库中。一般不推荐直接访问 mysql
数据库,因为对它们的任何毁坏都可能严重地伤害到 MySQL 服务器。需要直接访问它的时机之一是在需要获得所有用户账号列表时:
USE mysql;
SELECT user, password FROM user;
MySQL 为用户专门提供了账号管理相关的 SQL 语句,接下来我们来看看它们的使用方法。
用户账号管理
1. 创建用户账号
创建一个新的用户账号,可以使用 CREATE USER
语句。例如,在创建新用户账号时指定用户名、密码和允许连接的主机地址:
CREATE USER 'jochen'@'localhost' IDENTIFIED BY 'password';
主机地址 HOST 允许以下几种类型:
-
localhost
:只允许该用户在本地登录,不能远程登录; -
192.168.1.1
:具体的 IP 表示只允许该用户从特定 IP 登录; -
%
:允许在除本机之外的任何一台机器远程登录。
2. 用户重命名
为了重新命名一个用户账号,可以使用 RENAME USER
语句:
RENAME USER finley TO jochen;
3. 更改用户密码
为了更改用户密码,可以使用 SET PASSWORD
语句,同时密码必须使用 Password
函数进行加密:
SET PASSWORD FOR jochen = Password('$mysql$');
4. 更改主机地址
USE mysql;
UPDATE user SET host = '%' where user ='jochen';
FLUSH privileges;
5. 删除用户账号
为了删除一个用户账号以及相关的权限信息,可以使用 DROP USER
语句:
DROP USER jochen;
访问权限管理
1. 查看用户权限
在创建用户账号之后,必须给用户分配相应的访问权限。新创建的用户账号如果没有设置权限信息,该账号用户允许登录 MySQL 系统,但不能看到数据,不能执行任何数据库操作。查看用户账号的权限,可以使用 SHOW GRANTS
语句:
SHOW GRANTS FOR jochen;
2. 设置用户权限
为设置权限,使用 GRANT
语句,同时必须提供以下信息:
- 要授予的权限;
- 被授予访问权限的数据库或表;
- 用户名。
// 允许用户在 bankaccount 数据库的所有表上使用 SELECT 语句
GRANT SELECT ON bankaccount.* TO jochen;
// 授予用户多个权限,同时可以修改允许连接的主机地址
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP
ON bankaccount.*
TO 'jochen'@'localhost';
// 授予用户对所有数据库和表的所有权限,同时允许用户修改权限(相当于 root 用户)
GRANT ALL PRIVILEGES
ON *.*
TO 'jochen'@'localhost' WITH GRANT OPTION;
3. 撤销用户权限
使用 GRANT
语句来设置用户的访问权限,而 REVOKE
语句可以撤销特定的用户权限:
REVOKE SELECT ON bankaccount.* FROM jochen;
用户访问权限必须存在,否则 MySQL 会报错。
4. 常见权限说明
权限 | 说明 |
---|---|
ALL | 除 GRANT OPTION 外的所有权限 |
ALTER | 使用 ALTER TABLE 语句 |
CREATE | 使用 CREATE TABLE 语句 |
CREATE USER | 使用 CREATE USER 、DROP USER 、RENAME USER 、CREATE USER 、REVOKE ALL PRIVILEGES 语句 |
DELETE | 使用 DELETE 语句 |
DROP | 使用 DROP TABLE 语句 |
INSERT | 使用 INSERT 语句 |
SELECT | 使用 SELECT 语句 |
UPDATE | 使用 UPDATE 语句 |
USAGE | 无访问权限 |