一、进一步认识 DCL

DCL 是数据控制语言,主要用于管理用户和权限。在企业中这部分工作通常是由 DBA 完成,一般开发人员很少接触。

1.2. DCL 主要能做什么
  1. 创建用户
  2. 删除用户
  3. 修改密码
  4. 给予用户权限
  5. 撤销用户权限

二、权限体系

MySQL 的权限体系大致分为5个层级,全局层级、数据库层级、表层级、列层级和子程序层级。

层级 描述
全局层级 适用于一个给定服务器中的所有数据库。这些权限存储在 mysql.user 表中。
数据库层级 适用于一个给定数据库中的所有目标。这些权限存储在 mysql.db 和 mysql.host 表中
表层级 适用于一个给定表中的所有列。这些权限存储在 mysql.tabes_priv 表中
列层级 适用于一个给定表中的但一列。这些权限存储在 mysql.columns_priv 表中。当使用 REVOKE 时,必须指定与被授权列相同的列
子程序层级 CREATE ROUTINE,ALTER ROUTINE,EXECUTE和GRANT权限适用于一寸处的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了 CREYAE ROUTINE 外,这些权限可以被授予为子程序层级,并存储在 mysql.procs_priv 表中

MySQL 的权限信息主要存储在以下几张表中,当用户连接数据库时,MySQL 会根据这些表对用户进行权限验证。

表名 描述
user 用户权限表,记录账号、密码以及全局性权限信息
db 记录数据库相关权限
table_priv 用户对某个表拥有的权限
column_priv 用户对某表的某个列所拥有的权限
procs_priv 用户对存储过程以及存储函数的操作权限

三、用户管理

在MySQL中使用 CREATE USER 创建用户,用户创建后没有任何权限。语法如下:

CREATE USER '用户'[@'主机名'][IDENTIFIED BY'密码']

TIP:MySQL 的用户账号由两部分组成:用户名和主机名,即用户名@主机名,主机名可以是 IP 或机器名,主机名为 % 表示允许任何地址的主机远程登录 MySQL 。在创建用户的时候不指定主机名默认为 % 。

删除用户和修改密码语法如下:

# 删除用户
DROP USER '用户名'[@'主机名'];
# 修改密码
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码'

例如:

  1. 创建一个用户 zhangsan 允许在任何计算机上登录
create user 'zhangsan'@'%' identified by '123456';
  1. 创建一个用户 lisi 只允许在 IP 为 192.168.6.99 这台电脑上登录
create user 'zhangsan'@'192.168.6.99 ' identified by '123456';
  1. 创建一个用户 wangwu 只允许本地登录
create user 'wangwu'@'localhost' identified by '123456';