这篇文章开始介绍SQL语句的最后一个部分,DCL(Data Control Language)数据库控制语言。
1.简介
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访
问权限。
这一部分比较简单,主要为数据库用户的管理和权限配置。通过DCL语句可以创建数据库用户,并为每个用户设置数据库权限。
2.用户管理
2.1 查询用户
mysql数据库的用户表保存在mysql库中的user表中,可以通过sql语句或者使用navicat查看。
SELECT * from mysql.`user`;
表中从第三列开始每一列代表一个权限,Y为拥有此项权限,N为没有此项权限。
注意
第一列的Host为访问权限, 如果为localhost, 仅代表只能够在当前本机访问,是不可以
远程访问的。User代表的是数据库的用户名。
2.2 创建用户
语法:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
案例
创建名为test的本地用户
CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';
可以看到创建用户就在user表中添加了一条数据,并且默认是没有任何权限的。
2.3删除用户
DROP USER '用户名'@'主机名' ;
案例
删除test的本地用户
DROP USER 'test'@'localhost' ;
2.4修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
案例
修改test的本地用户的密码为654321
ALTER USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY '654321' ;
3.权限管理
Mysql中的权限主要分为对数据的操作权限和对表的操作权限。
数据操作权限分为:
- 查询权限
- 修改权限
- 插入权限
- 删除权限
表操作权限分为:
- 修改表
- 删除数据库/表/视图
- 创建表/数据库
具体如下表所示:
权限 | 说明 |
---|---|
ALL | 所有权限 |
SELECT | 查询数据权限 |
INSERT | 插入数据权限 |
UPDATE | 更新数据权限 |
DELETE | 删除数据权限 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
3.1 授予权限
上面提到,创建用户后,默认是没有任何权限的,因此需要给用户赋予对应的权限。
语法:
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
案例
给test授予test库所有权限
GRANT ALL ON test.* TO 'test'@'localhost';
给test授予所有库的查询,删除,插入权限
GRANT SELECT,INSERT,DELETE ON *.* TO 'test'@'localhost';
-- 第一个*表示所有数据库,第二个*表示数据库中的所有表
3.2 撤销权限
语法:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
案例
撤销test用户test库的所有权限
REVOKE ALL ON test.* FROM 'test'@'localhost';
撤销test所有库的查询,删除,插入权限
REVOKE SELECT,INSERT,DELETE ON *.* FROM 'test'@'localhost';
-- 第一个*表示所有数据库,第二个*表示数据库中的所有表
3.3 查询权限
语法:
SHOW GRANTS FOR '用户名'@'主机名' ;
案例
查询本地用户test的权限
SHOW GRANTS FOR 'test'@'localhost';