实训五:数据库安全控制 - MySQL数据库 - 授权与撤销授权

news2025/1/14 1:12:28

MySQL数据库 - 授权与撤销授权

  • 第1关:数据库授权
    • 任务描述
    • 相关知识
      • 用户管理
      • 授权方式
    • 编程要求
    • 测试说明
    • 参考代码
  • 第2关:数据库撤销权限
    • 任务描述
    • 相关知识
      • 撤销权限
    • 编程要求
    • 测试说明
    • 参考代码

第1关:数据库授权

任务描述

本关任务:新建数据库登录用户,并给用户设置权限。

相关知识

为了完成本关任务,你需要掌握:1.用户管理;2. 数据库授权方式。

用户管理

一般安装了 MySQL 之后都只有一个超级管理权限的用户root,且root限制只能在数据库本机上使用,实际上 MySQL 是支持多用户登录的,下面我们一起来学习对用户的管理。

首先我们通过 MySQL 默认的mysql数据库中user表查询一下用户情况:

image

可以看到只有root用户,下面我们来看看如何新建用户以及对用户的一些常用操作:

  • 创建用户
    create user '用户名'@'允许登录的主机地址' identified by 密码;
    

示例:

#创建指定ip为 192.168.1.1 的lyn用户登录
create user 'lyn'@'192.168.1.1' identified by '123';
#创建指定ip为 192.168.1 开头的lyn用户登录
create user 'lyn'@'192.168.1.%' identified by '123';
#创建指定任何ip的lyn用户登录
create user 'lyn'@'%' identified by '123';

image

  • 删除用户
    drop user '用户名'@'允许登录的主机地址';
    
  • 修改用户名
    rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
    
  • 修改密码
    set password for '用户名'@'IP地址' = Password('新密码');
    

授权方式

有了新用户,我们就需要考虑权限问题了,而新创建的用户默认情况下是什么权限都没有的,想要操作数据库,就必须进行授权。

查看权限:show grants for '用户'@'IP地址'

image

上图中ALL表示允许做任何事,而USAGE则表示只允许登录,其他什么也做不了。下面切换为用户lyn登录,并试图创建数据库:

image

可以看到错误提示我们没有权限,不能操作,其实在稍微大一点的公司里面都是有着明显的权限管理。特别是操作数据库这样重要的东西,万一你要是一不小心删库了,就麻烦了,所以在公司里面一般一个项目都会创建一个专门的用户指定其权限只能控制某一个数据库进行操作,下面我们一起来为lyn用户设置权限。

MySQL 的权限命令是grant,语法为:

grant 权限列表 on.to 用户名@'ip' identified by "密码";

示例1
image

上面的语句表示将所有数据库的所有权限授权给lyn这个用户,允许lyn用户在123.123.123.123这个 IP 进行远程登录,并设置lyn用户的登录密码为123456

示例2
image

上面语句表示将mysql_db数据库中的sys_user表的查询权限给qjh用户。最后查看权限中也表示该用户对mysql_db数据库sys_user表有查询权限。

注意:授权操作只能是root用户来操作;grant给用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效;授权后一定要刷新权限,使权限立即生效:FLUSH PRIVILEGES;

另外在使用grant给用户添加权限时,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个select权限,后来又给用户添加了一个insert权限,那么该用户就同时拥有了selectinsert权限。

更多用户详情的权限列表请参考 MySQL 官网说明。

编程要求

根据提示,在右侧编辑器中编写 SQL,将用户casual_user@'localhost'的密码修改为123456,并给其授所有数据库的“增改查”的权限。(连接数据库的用户名为:root,密码为:123123。)

测试说明

你只需做权限修改,平台会对你编写的SQL进行测试:

提示:对用户的权限控制,一条 SQL 的权限列表可含有多个,也就是可以使用一条 SQL 命令来控制用户的多个权限。

预期输出:

+-------------+-----------+-------------------------------------------+
| user        | host      | password                                  |
+-------------+-----------+-------------------------------------------+
| casual_user | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+-----------+-------------------------------------------+
+-------------------------------------------------------------------------------------------------------------------------------------+
| Grants for casual_user@localhost                                                                                                    |
+-------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO 'casual_user'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+-------------------------------------------------------------------------------------------------------------------------------------+

开始你的任务吧,祝你成功!

参考代码


##########  开始编写 SQL  ##########
set password for casual_user@'localhost' = password('123456');
-- grant SELECT,INSERT,UPDATE on . to casual_user@'localhost' identified by "123456";
grant SELECT ,INSERT, UPDATE on *.* to casual_user@'localhost';
FLUSH PRIVILEGES;

第2关:数据库撤销权限

任务描述

本关任务:撤销用户的权限。

相关知识

为了完成本关任务,你需要掌握如何撤销权限。

撤销权限

上一章节我们学习了如何给用户授权,那么需要撤回授权,我们有没有办法呢?

MySQL 同样也提供了撤销权限的方法 ——revokerevokegrant语法差不多,只需要把关键字to换成from即可,并且revoke语句中不需要跟密码设置,具体如下:

revoke 权限列表 on.from 用户名@'ip';

grant一样,revoke用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

**注意:**revoke可以回收所有权限,也可以回收部分权限,且授权只是收回权限,用户仍可以登录。

示例:

image

上面的撤回语句表示将用户qjh@'localhost'mysql_db数据库中对sys_user表的删除delete权限撤销了,即该用户不对mysql_db数据库进行删除操作了。

编程要求

在右侧编辑器中编写如下要求的 SQL:

  • 将用户user1对数据库mydb1中的table1table2所有权限收回

  • 将用户user2对数据库mydb2中的所有表mydb2.*)的增加、查询、更新、删除、创建、修改属性权限收回

测试说明

平台会对你编写的代码进行测试:

预期输出:

+--------------------------------------------------------------------------------------------------------------+
| Grants for user1@localhost                                                                                   |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
| GRANT ALL PRIVILEGES ON `mydb1`.`table3` TO 'user1'@'localhost'                                              |
+--------------------------------------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for user2@localhost                                                                                                                                                              |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'                                                                            |
| GRANT DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mydb2`.* TO 'user2'@'localhost' |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

开始你的任务吧,祝你成功!

参考代码


##########  开始编写 SQL  ##########


revoke all on mydb1.table1 from 'user1'@'localhost';

revoke all on mydb1.table2 from 'user1'@'localhost';

revoke insert,select,update,create,delete,alter on mydb2.* from 'user2'@'localhost';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1,Anaconda3-2023.03)

本文主要讲述了在Ubuntu中安装anaconda的具体步骤 准备环境:Ubuntu22.04.1,Anaconda3 1.下载Anaconda3 在清华镜像下载Linux版本的anaconda 清华镜像官网Anaconda下载 我选择的是Anaconda3-2023.03-Linux-x86_64.sh 下载好的Anaconda3-2023.03-Linux-…

拦截器Interceptor及与过滤器Filter的区别

统一拦截–拦截器Interceptor 1.概述 概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。与过滤器Fil…

【Java|多线程与高并发】设计模式-单例模式(饿汉式,懒汉式和静态内部类)

文章目录 1. 前言2. 单例模式3. 如何保证一个类只有一个实例4. 饿汉式单例模式5. 懒汉式单例模式6. 实现线程安全的懒汉式单例7. 静态内部类实现单例模式8. 总结 1. 前言 设计模式是一种在软件开发中常用的解决复杂问题的方法论。它提供了一套经过验证的解决方案,用…

通信原理概述

通信是指人们通过某种媒介进行信息传递。通过某种介质或通道,将信息从一个地点传递到另一个地点的过程。通信可以是人与人之间的交流,也可以是设备、系统或网络之间的数据传输。 通信信号的分类方法: 1)模拟信号和数字信号(从信号…

数字游戏:如何统计能整除数字的位数?

本篇博客会讲解力扣“2520. 统计能整除数字的位数”的解题思路,这是题目链接。 本题的思路是:取出每一位,判断是否能整除。 如何取出每一位呢?可以采用“mod10除10”的策略。即:每次mod10取出最后一位数,再…

2022年软件测试面试题大全【含答案】

一、面试基础题 简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(…

C++面向对象 this指针 构造函数 析构函数 拷贝构造 友元

C面向对象 面向对象概念类与对象的区别 C中类的设计设计实例实例解释共有和私有类的认识 函数定义函数在类里定义和类外定义区别函数定义实例 C对象模型方案一:各对象完全独立地安排内存的方案方案二:各对象的代码区共用的方案: this指针this指针特点程序编译面向对象程序的过程…

【力扣刷题 | 第十四天】

目录 前言: 7. 整数反转 - 力扣(LeetCode) 面试题 16.05. 阶乘尾数 - 力扣(LeetCode) 总结; 前言: 今天仍然是无固定类型刷题, 7. 整数反转 - 力扣(LeetCode) 给你…

傅氏变换算法

半局积分算法的局限性是要求采样的波形为正弦波。当被采样的模拟量不是正弦波而是一个周期性时间函数时,可采用傅氏变换算法。傅氏变换算法来自于傅里叶级数,即一个周期性函数I(t)可用傅里叶级数展开为各次谐波的正弦项和余弦项之…

D117-72. 编辑距离

题目描述 链接:添加链接描述 跟只考虑删除的完全一样,只不过是dp[i-1][j-1]1 class Solution:def minDistance(self, word1: str, word2: str) -> int:# dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2&…

Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现

文章目录 前言一、效果二、代码实现1.工程文件夹结构2.BackWidget类2.1 backwidget.h2.2 backwidget.cpp 总结 前言 在用Qt做一些应用的时候,有可能遇到和“绘制顺序”相关的问题,即要控制一些控件之间的显示前后问题,在常用的QWidget体系中&…

【数据结构与算法】力扣:翻转二叉树

翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[2,…

云HIS是什么?HIS系统为什么要上云?云HIS有哪些优点?

一、当前医疗行业HIS的现状与发展趋势 1.医院信息系统(HIS)经历了从手工到单机再到局域网的两个阶段,随着云计算、大数据新技术迅猛发展,基于云计算的医院信息系统将逐步取代传统局域网HIS , 以适应人们对医疗卫生服务越来越高的要…

BI-SQL丨角色和用户

角色和用户 在数仓的运维工作中,经常需要为用户开通不同权限的账号,使用户可以正常访问不同的数据,那么这就需要我们了解SQL Server的权限体系。 名词解释 登录名: 用来登录服务器的用户账号,例:sa&…

String类型

前言 之所以介绍是因为基本数据类型是系统中一切操作的基础,就像物理世界中的原子,高楼大厦中的砖瓦。当咱们整明白了这些基本数据类型,使用层面就是挑选和组合的问题了。本文小结下Redis中数据结构和使用场景,如果你有更骚气的挑…

Python中文件的读取

在Python中可以通过内置函数open()、read()和readline()实现文件的读取。 1 打开文件函数 1.1 open()函数的基本用法 open()是Python的内置函数,用来打开指定文件。该函数使用代码如下所示: fin open(words.txt) 其中,参数指定了要打开…

【软件设计师暴击考点】计算机网络知识高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

NodeJS Request下载图片文件到本地⑩⑦

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言使用模块创建文件删除文件写入图片案例效果总结 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持&#x1f…

网页前端制作需要哪些基础知识?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言HTML基础知识1 HTM…

存款进阶“10万元门槛”,年轻人为何遭遇困境?

文章目录 ❗❗ 前言💌目前的存款在哪一个区间?你觉得存款难吗?😢存钱到底有多难?🤍为存款做出过哪些努力?🧧没钱更要理财吗?🆔影响年轻人存款能力和存款意愿的…