MYSQL数据库DCL数据控制,一文带你了解

221 阅读3分钟

前言

本系列文章就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。

全文大约【1349】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一.什么是DCL

数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、存储程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。

简单来说呢,DCL其实就是MySQL权限控制的一系列SQL语句。下面我们就一起来试一试DCL语句的各种操作吧。

1. 创建用户

下面是创建一个MySQL新用户的语法。

CREATEUSER用户名@服务器域名IDENTIFIED BY密码

举个栗子: 创建一个用户。

#创建一个 jiange 用户

CREATE USER `jiange`@`%` IDENTIFIED BY '123';

2. 授权

创建完用户后,下面带各位小伙伴给这个用户赋予数据库表的访问权限。赋权后用这个账户登录,那么才可以访问赋予权限的表。

语法:GRANT ALL ON数据库.表TO用户名;

举个栗子:用户授权。

#将test下的所有表的权限都赋给 jiange

GRANT ALL ON test.* TO `jiange`;

image.png

3. 撤销权限

赋予用户权限后如果想撤销用户权限可以使用下面语法来进行权限的取消。

语法:REVOKE ALL ON数据库.表名FROM用户名;

注意:撤销权限后,账户要重新连接客户端才会生效。

举个栗子:撤销用户权限。

#将 jiange 的 test 的权限撤销

REVOKE ALL ON test.* FROM `jiange`;

4. 删除用户

下面我们最后介绍一种DCL语法,就是当这个用户账户不需要的时候,可以利用下面的语法将用户删除掉。

语法:DROP USER用户名;

举个栗子:删除用户。

#删除用户 jiange

DROP USER `jiange`;

5. 让权限生效

创建完新用户,以及授权的SQL语句执行完不生效怎么办?那么下面的语句就是让授权生效的语法。

语法:FLUSH PRIVILEGES;

但是我发现有时候不执行这个命令,授权语句执行之后,权限验证也是OK的,但是有时候发现不执行这个FLUSH PRIVILEGES命令,权限认证还不能通过。

那么到底什么情况下需要执行FLUSH PRIVILEGES?什么情况下不需要执行这个命令呢?

当我们不是通过create user、grant、revoke、drop命令来操作用户和权限,而是通过update语句直接去修改了mysql.user表中的数据的时候,此时我们需要执行FLUSH PRIVILEGES命令。

此时我们也应该知道FLUSH PRIVILEGES命令的作用了,它的作用就是清空MySQL内存中acl_users数组的数据内容,重新从mysql.user表中加载用户的权限信息。

而当我们直接修改了mysql.user表中的内容的时候,MySQL内存中的acl_users数据信息是没有被更新的,所以此时我们想让我们对mysql.user表的修改直接生效,就需要手动的去更新acl_users数组的信息,而这个更新内存权限信息的操作,也就是通过FLUSH PRIVILEGES命令来实现的。


二. 结语

最后在这里对本文核心要点进行总结:

1.  熟练掌握创建用户、授权、回收权限、删除用户的语句。

2.  理解FLUSH PRIVILEGES语句的使用时机。