DCL(数据控制语言)
- DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。
一、管理用户
1、查询用户
- 在MySQL数据库管理系统中,
mysql
是一个特殊的系统数据库名称,它并不是用户创建的普通数据库,而是MySQL安装时自动创建并包含一系列系统表和信息的数据库,它包含了MySQL服务器运行所需的系统表和元数据。
-- 这里的mysql是数据库名,是mysql自带的一个数据库名称,mysql下有一个user表,
-- user表存储了所有MySQL用户账户的信息,包括用户名、密码哈希、主机名、全局权限等
-- 但是不是所有用户都有权限查看这个user表的
select * from mysql.user;
不是所有用户都有权限查看这个user表的
,可以在root用户下执行该sql,root用户具有所有的权限。
- Host(主机名):指定了用户可以从哪个主机连接到 MySQL 服务器。
- localhost 表示用户只能从本地机器连接。
- 而 % 是一个通配符,表示用户可以从任何主机连接(这通常用于远程连接,但需要谨慎使用以避免安全风险)。
- User(用户名):代表的是访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识一个用户。
2、创建用户
- 语法:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
- 实例:
-- 创建用户dadao, 只能够在当前主机localhost访问, 密码123456;
create user 'dadao'@'localhost' identified by '123456';-- 创建用户knife, 可以在任意主机访问该数据库, 密码123456;
create user 'knife'@'%' identified by '123456';
3、修改用户密码
- 语法:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
- 实例:
-- 修改用户dadao的访问密码为1234;alter user 'heima'@'%' identified with mysql_native_password by '1234';
- 修改报错:
- 正确修改:
4、 删除用户
- 语法:
DROP USER '用户名'@'主机名' ;
- 实例:
-- 删除 dadao@localhost 用户drop user 'dadao'@'localhost';
注意事项:
在MySQL中需要通过'用户名'@'主机名'的方式,来唯一标识一个用户。
主机名可以使用 % 通配。
这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库管理员)使用。
二、控制权限
- mysql常用的权限(权限列表)
- 语法:
-- 查询权限SHOW GRANTS FOR '用户名'@'主机名' ;-- 授予权限GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';-- 撤销权限REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
- 注意事项:
多个权限之间,使用逗号分隔
授权时, 数据库名和表名可以使用 * 进行通配,代表所有
- 实例:
-- 查询 'knife'@'%' 用户的权限show grants for 'knife'@'%';-- 授予 'knife'@'%' 用户company数据库所有表的所有操作权限grant all on company.* to 'knife'@'%';-- 撤销 'knife'@'%' 用户的company数据库的所有权限revoke all on company.* from 'knife'@'%';
1、查询权限
- 语法:
-- 查询权限SHOW GRANTS FOR '用户名'@'主机名' ;
- 实例:
-- 查询 'knife'@'%' 用户的权限show grants for 'knife'@'%';
-
查询用户knife的权限
-
GRANT USAGE ON . TO ‘knife’@'%'解释:
- GRANT 是授予权限的 SQL 命令。
- USAGE 是被授予的权限类型。(USAGE 是一种非常基础的权限,它实际上并不授予用户对数据库进行任何操作的能力)
- ON . 表示这个权限适用于所有数据库(第一个 *)和所有表(第二个 *)。
- TO ‘knife’@‘%’ 指定了权限被授予的用户,这里的用户是 knife,@‘%’ 表示该用户可以从任何主机连接到 MySQL 服务器。
-
root用户的权限
2、授予权限
- 语法:
-- 授予权限GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
- 实例:
-- 授予 'knife'@'%' 用户company数据库所有表的所有操作权限grant all on company.* to 'knife'@'%';
- 授予knife用户company所有表的所有权限
- 再次查看knife的权限
3、撤销权限
- 语法:
-- 撤销权限REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
- 实例:
-- 撤销 'knife'@'%' 用户的company数据库的所有权限revoke all on company.* from 'knife'@'%';
- 撤销knife对company数据额权限
- 再查看knife的权限