【必知必会的MySQL知识】④DCL语言

yizhihongxing

一、概述

数据控制语言,用来定义访问权限和安全级别。主要包含包括grantrevoke 关键字

  • grant 授予权限
  • revoke 回收权限

二 、授权

2.1 语法格式

GRANT priv_type [(column_list)]  [, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]

2.2 语法说明

参数 参数说明
priv_type 参数表示权限类型
columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表
object_type 参数用于指定权限对象
priv_level 参数用于指定权限级别
user 参数表示用户账户;由用户名和主机名构成,格式是“'username'@'hostname'”
IDENTIFIED BY 参数用来为用户设置密码
password 参数是用户的新密码
WITH 一个或多个with_option 参数

with_option 参数一共5个选项

with_option参数 参数说明
GRANT OPTION 被授权的用户可以将这些权限赋予给别的用户
MAX_QUERIES_PER_HOUR count 设置每个小时可以允许执行 count 次查询
MAX_UPDATES_PER_HOUR count 设置每个小时可以允许执行 count 次更新
MAX_CONNECTIONS_PER_HOUR count 设置每小时可以建立 count 个连接
MAX_USER_CONNECTIONS count 设置单个用户可以同时具有的 count 个连接

2.3 权限类型

权限类型分类

权限类型 说明
数据库权限 和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表的权限
表权限 和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据的权限
列权限 和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 name 列的值的权限
用户权限 和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限

① 授予数据权限时,<权限类型>可以指定为以下值

权限名称 对应user表中的字段 说明
SELECT Select_priv 表示授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限。
INSERT Insert_priv 表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。
DELETE Delete_priv 表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。
UPDATE Update_priv 表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。
REFERENCES References_priv 表示授予用户可以创建指向特定的数据库中的表外键的权限。
CREATE Create_priv 表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。
ALTER Alter_priv 表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。
SHOW VIEW Show_view_priv 表示授予用户可以查看特定数据库中已有视图的视图定义的权限。
CREATE ROUTINE Create_routine_priv 表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。
ALTER ROUTINE Alter_routine_priv 表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。
INDEX Index_priv 表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。
DROP Drop_priv 表示授予用户可以删除特定数据库中所有表和视图的权限。
CREATE TEMPORARY TABLES Create_tmp_table_priv 表示授予用户可以在特定数据库中创建临时表的权限。
CREATE VIEW Create_view_priv 表示授予用户可以在特定数据库中创建新的视图的权限。
EXECUTE ROUTINE Execute_priv 表示授予用户可以调用特定数据库的存储过程和存储函数的权限。
LOCK TABLES Lock_tables_priv 表示授予用户可以锁定特定数据库的已有数据表的权限。
ALL 或 ALL PRIVILEGES 或 SUPER Super_priv 表示以上所有权限/超级权限

② 授予权限时,<权限类型>可以指定为以下值:

权限名称 对应user表中的字段 说明
SELECT Select_priv 授予用户可以使用 SELECT 语句进行访问特定表的权限
INSERT Insert_priv 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限
DELETE Delete_priv 授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限
DROP Drop_priv 授予用户可以删除数据表的权限
UPDATE Update_priv 授予用户可以使用 UPDATE 语句更新特定数据表的权限
ALTER Alter_priv 授予用户可以使用 ALTER TABLE 语句修改数据表的权限
REFERENCES References_priv 授予用户可以创建一个外键来参照特定数据表的权限
CREATE Create_priv 授予用户可以使用特定的名字创建一个数据表的权限
INDEX Index_priv 授予用户可以在表上定义索引的权限
ALL 或 ALL PRIVILEGES 或 SUPER Super_priv 所有的权限名

③ 授予权限时,<权限类型>可以指定以下值

权限名称 对应user表中的字段 说明
SELECT Select_priv 授予用户可以使用 SELECT 语句进行访问特定表的权限
INSERT Insert_priv 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限
UPDATE Update_priv 授予用户可以使用 UPDATE 语句更新特定数据表的权限

④授予用户权限时,<权限类型> 除了可以指定为授予数据库权限,还可以指定以下值

权限名称 说明
CREATE USER 表示授予用户可以创建和删除新用户的权限
SHOW DATABASES 表示授予用户可以使用 SHOW DATABASES 语句查看所有已有的数据库的定义的权限

2.4 权限级别

权限级别 说明
* 表示当前数据库中的所有表
*.* 表示所有数据库中的所有表
db_name.* 表示某个数据库中的所有表,db_name 指定数据库名
db_name.tbl_name 表示某个数据库中的某个表或视图,db_name 指定数据库名,tbl_name 指定表名或视图名
db_name.routine_name 表示某个数据库中的某个存储过程或函数,routine_name 指定存储过程名或函数名
TO 子句 如果权限被授予给一个不存在的用户,MySQL 会自动执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户设置密码

三、 回收权限

3.1 语法格式

REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user]...

3.2 语法说明

参数 参数说明
priv_type 参数表示权限的类型
column_list 参数表示权限作用于哪些列上,没有该参数时作用于整个表上
user 参数由用户名和主机名构成,格式为“username'@'hostname'”

3.3 注意事项

  • REVOKE 语法和 GRANT 语句的语法格式相似,但具有相反的效果。
  • 要使用 REVOKE 语句,必须拥有 MySQL 数据库的全局 CREATE USER 权限或 UPDATE 权限

四 、实践操作

① 运维童鞋想要查询所有用户的权限

select * FROM mysql.user;

在这里插入图片描述
②运维童鞋想要创建一个新的用户testXiezhr,密码为testXiezhr。并授予test用户所有的数据查询、插入权限

# 创建用户并授权
mysql> GRANT SELECT,INSERT ON *.*
    ->      TO 'testXiezhr'@'localhost'
    ->      IDENTIFIED BY 'testXiezhr'
    ->       WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 使用 SHOW GRANTS 语句查询用户 testXiezhr的权限
mysql> show grants for 'testXiezhr'@localhost;
+---------------------------------------------------------------------------+
| Grants for testXiezhr@localhost                                           |
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

③ 运维童鞋想要收回testXiezhr用户的插入权限

# 使用revoke关键字收回insert 权限
mysql> REVOKE INSERT ON *.* FROM 'testXiezhr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
#使用 SHOW GRANTS 语句查询用户 testXiezhr的权限,我们发现insert 权限没有了
mysql> show grants for 'testXiezhr'@localhost;
+-------------------------------------------------------------------+
| Grants for testXiezhr@localhost                                   |
+-------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

原文链接:https://www.cnblogs.com/xiezhr/p/17343320.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【必知必会的MySQL知识】④DCL语言 - Python技术站

(0)
上一篇 2023年5月4日
下一篇 2023年5月4日

相关文章

  • 由浅入深学MYSQL之–MySQL分组查询详解

    前言 从今天开始本系列文内容就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1066】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有…

    MySQL 2023年5月6日
    00
  • MySQL延迟问题和数据刷盘策略流程分析

    MySQL延迟问题和数据刷盘策略流程分析 MySQL是一款常用的关系型数据库管理系统,但是在使用过程中,有可能会出现延迟问题和数据刷盘策略不当的情况。本文将从延迟问题和数据刷盘策略流程分析两个方面进行详细讲解,并附带两个示例说明。 延迟问题 MySQL在使用过程中,可能会出现延迟问题,表现为读取数据或执行SQL语句的响应时间过长。 延迟问题的产生可能是因为M…

    MySQL 2023年5月19日
    00
  • 详解MySQL运算符的优先级

    MySQL 运算符优先级是指在表达式中,哪些运算符先执行,哪些运算符后执行的问题。在 MySQL 中,像加减乘除等算术运算符、比较运算符、逻辑运算符等都有自己的优先级,且按照一定的规则进行执行。 本文将为大家介绍MySQL中的运算符优先级,并提供相应的代码示例。 MySQL 运算符优先级的分类 MySQL 运算符的优先级按照由高到低的顺序为以下几类: 圆括号…

    MySQL 2023年3月9日
    00
  • 基于Redo Log和Undo Log的MySQL崩溃恢复解析

    基于Redo Log和Undo Log的MySQL崩溃恢复解析 概述 MySQL是广泛使用的关系型数据库管理系统,但在使用中也会遇到各种各样的问题,例如数据丢失和崩溃等。针对这些问题,MySQL提供了多种解决方案。其中,使用Redo Log和Undo Log进行崩溃恢复是常见的方法之一。 Redo Log和Undo Log Redo Log和Undo Log…

    MySQL 2023年5月18日
    00
  • MySQL数据库导入导出数据之报错解答实例讲解

    我们来详细讲解“MySQL数据库导入导出数据之报错解答实例讲解”。首先,数据库导入导出数据是数据库管理中非常常见和重要的操作,但有时候我们在导入导出数据时会遇到一些问题,如报错等。本文将从以下几个方面给大家深入的介绍如何解决数据库导入导出数据的报错问题: 导出数据时如何避免空数据报错 导入数据时如何解决字符集不匹配问题 导入数据时如何解决导入数据量过大的问题…

    MySQL 2023年5月18日
    00
  • MySQL学习之分组查询的用法详解

    MySQL学习之分组查询的用法详解 在MySQL中,分组查询(Group By)是常用的用于聚合数据的操作。通过分组查询,我们可以将结果按照某个或多个列进行分组,然后对分组后的结果进行统计、计算或其他集合操作。本文将详细介绍MySQL分组查询的用法及示例说明。 语法 MySQL中的分组查询语法如下所示: SELECT column1, column2, ..…

    MySQL 2023年5月19日
    00
  • 一文搞懂MySQL索引所有知识点

    一文搞懂MySQL索引所有知识点 在MySQL中,索引是提高查询性能和数据一致性的重要工具。正确理解MySQL索引的原理和技巧,对于数据库性能的优化和提升数据查询效率至关重要。本文将带着您全面了解MySQL索引的所有知识点。 1. 索引的基本概念 索引的作用 索引是一种数据结构,可以提高查询的效率,加速数据的查找过程。通过建立索引,系统可以快速地找到满足查询…

    MySQL 2023年5月19日
    00
  • 读《mysql是怎样运行的》有感

    最近读了一本书《mysql是怎样运行的》,读完后在大体上对mysql的运行有一定的了解。在以前,我对mysql有以下的为什么: InnoDB中的表空间、段、区和页是什么? redo log为什么就能实现事务的持久性? 到底什么是意向锁?意向锁有什么用? mysql中的外连接、内连接到底是什么? 事务中的一致性到底是什么意思?一致性和原子性有什么不一样? 现在…

    MySQL 2023年4月23日
    00
合作推广
合作推广
分享本页
返回顶部