一、进一步认识 DCL
DCL 是数据控制语言,主要用于管理用户和权限。在企业中这部分工作通常是由 DBA 完成,一般开发人员很少接触。
1.2. DCL 主要能做什么
- 创建用户
- 删除用户
- 修改密码
- 给予用户权限
- 撤销用户权限
二、权限体系
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 创建用户,用户创建后没有任何权限。语法如下:
代码语言:javascript复制CREATE USER '用户'[@'主机名'][IDENTIFIED BY'密码']
TIP:MySQL 的用户账号由两部分组成:用户名和主机名,即用户名@主机名,主机名可以是 IP 或机器名,主机名为 % 表示允许任何地址的主机远程登录 MySQL 。在创建用户的时候不指定主机名默认为 % 。
删除用户和修改密码语法如下:
代码语言:javascript复制# 删除用户
DROP USER '用户名'[@'主机名'];
# 修改密码
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码'
例如:
- 创建一个用户 zhangsan 允许在任何计算机上登录
create user 'zhangsan'@'%' identified by '123456';
- 创建一个用户 lisi 只允许在 IP 为 192.168.6.99 这台电脑上登录
create user 'zhangsan'@'192.168.6.99 ' identified by '123456';
- 创建一个用户 wangwu 只允许本地登录
create user 'wangwu'@'localhost' identified by '123456';