MySQL 用户管理

maxintcsdnblog 2019-06-27

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. 常见权限说明
权限说明
ALLGRANT OPTION 外的所有权限
ALTER使用 ALTER TABLE 语句
CREATE使用 CREATE TABLE 语句
CREATE USER使用 CREATE USERDROP USERRENAME USERCREATE USERREVOKE ALL PRIVILEGES 语句
DELETE使用 DELETE 语句
DROP使用 DROP TABLE 语句
INSERT使用 INSERT 语句
SELECT使用 SELECT 语句
UPDATE使用 UPDATE 语句
USAGE无访问权限

相关推荐