【MySQL】视图 + 用户管理

视图

  • 前言
  • 正式开始
    • 视图
    • 用户管理
      • user表
      • 创建新用户
      • 修改用户密码
      • 权限管理
        • 给用户赋权
        • 剥夺权限

在这里插入图片描述

前言

本篇所讲的视图和我上一篇事务中所讲的读视图不是一个东西,二者没有任何关系,如果看过我前一篇博客的同学不要搞混了。

其实视图和用户管理本来是想着分开来说的,不过两个的内容都比较少,就直接放一块讲了。

正式开始

视图

视图其实很简单,理解是一个虚拟表,其内容由查询定义。

语法:

create view 视图名 as select语句;

来个例子,用我前面博客中创建的两张表:
在这里插入图片描述

当前这个库中有三张表,除了上面的dept和emp,还有一个salgrade,不过这个表后面用不上:
在这里插入图片描述
我前面讲过,建表对应到系统中就是在建文件:
在这里插入图片描述

这里存储引擎是InnoDB的,所以每个表对应两个文件,一个.frm为存储表结构的文件,一个.ibd为存储索引和数据的文件。

这里用emp和dept这两张表进行内连接,连接条件为两表中的deptno相等,取出其中的enmae列和dname列:
在这里插入图片描述

但是如果我想要高频的查找这两列数据的话,每次都要高很长的sql,比较麻烦,那么就可以用视图来创建一个虚拟的表结构:
在这里插入图片描述

可以看到创建一个视图就相当于是创建了一张表,我们可以对myview这个视图进行查看,用起来就像表一样:
在这里插入图片描述

那么也会在对应的路径下产生相应的文件:
在这里插入图片描述

不过这里创建视图后,只产生了一个.frm文件,也就是只有一个存储表结构的文件。

那存储表中数据的文件在哪里呢?
其实就是emp和dept的.ibd文件,视图和基表中的数据是同步的。

像emp表和dept表都是基表。

当我对视图中的数据进行修改:
在这里插入图片描述

可以看到基表中的数据也被改了,看一下emp基表:
在这里插入图片描述

可以看到被修改了。

那么我再改一下dept表中的数据:
在这里插入图片描述

可以看到也修改了。

同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

如果想要删除视图,用drop:
在这里插入图片描述

视图规则和限制

  • 与表一样,必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • 尽量不要在视图中用order by
  • 视图可以和表一起使用

用户管理

user表

在数据库刚装好后会有几个库是自带的,比如说mysql、sys等:
在这里插入图片描述

这几个库中的表不要随便删,小心出问题,我记得我不久前把db_1整个库给删了,研究了半天,最后重新下了mysql才搞好的。

这些库中有很多表结构。

MySQL在登录的时候也要记录下来哪些用户允许使用MySQL,哪些用户不允许使用MySQL,而这些信息也是要在MySQL中的特定表结构中保存下来的,而这个表就是上图中mysql库中的user表:
在这里插入图片描述

看一下这个表中都有什么内容(里面的字段有点多,横着打印看不全,先截出来一部分):
在这里插入图片描述

其实很多字段都没必要看,看下面的这三个就行:
在这里插入图片描述

  • host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
  • user: 用户名
  • authentication_string: 用户密码通过password函数加密后形成的密文(这一点在我前面的博客中也讲过,就是通过hash来给你的密码进行加密,不明文存放密码,登录的时候只需要再次经过相同的哈希算法来比较库中存放的结果)
  • 上面的一堆*_priv: 用户拥有的权限

图中root用户就是默认的超级用户,这个就不说了吧。

关于session和sys用户:
session:MySQL5.7新增用户,用于用户身份验证。
sys:MySQL5.7新增用户,用于系统模式对象的定义,防止DBA(数据库管理员)重命名或删除root用户时发生错误。

默认情况下,用户mysql.session和mysql.sys已被锁定,使得数据库操作人员无法使用这两个用户通过客户端连接MySQL服务器.因此,建议不要随意解锁和使用mysql.session和mysql.sys用户.
————————————————
版权声明:本文为CSDN博主「是乔乔啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24889005/article/details/107590471

上面我是设置好了只有一个root用户,如果我现在想用其他名字来登录是不行的:
在这里插入图片描述

不管有没有密码都是认证失败的。

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理,像下面图中这样,给某个用户特定的权限,只能访问部分库:
在这里插入图片描述

这就是用户管理。

下面来说说如何添加新用户。

创建新用户

语法:

create user '用户名'@'登陆主机/ip' identified by '密码';

其中@后面跟的是你想要新创建出来的用户在哪台主机上可以登陆,必须得指定,可以理解为’用户名’@'登陆主机/ip’是搭配在一块的。

演示:
在这里插入图片描述
这里创建一个名字为张三的用户,登录主机的IP是localhost,也就是只能我本机登录。

可以看到创建一个用户就是在对应user表中添加一条记录,那么其实我们也可以直接往这个表中暴力插入一条用户记录,是可以登录的,不过表中的列太多了,这样搞着很麻烦,不如直接用create user,同样的效果,就是插入一条记录。

这里只是为了让你明白创建用户、删除用户、修改用户信息等操作就是在user表中做增删改。

新用户创建好了之后必须得用flush privileges刷新一下:

在这里插入图片描述

登录:
在这里插入图片描述

成功。

我这里Windows下也安装有mysql,测试一下远端登录:
在这里插入图片描述
-P后面跟的是端口号,我这里就不把我的端口号给出来了(不要轻易的把你mysql服务器的端口号暴露到公网上)。

可以看到这里登录失败了,上面说我这里的IP不允许登录我云服务器上的mysql。意思就是我不能进行远端登录。

那我来创建一个能远端登录的用户:
在这里插入图片描述
%表示所有主机都能登录,这样搞是因为你远端登录的时候可能换一个网IP就会改变,一变就要再设置一下指定IP,但是这样比较麻烦。用%更方便一点,但是不推荐这样做。

在这里插入图片描述

可以通过netstat来查看我当前Windows下的连接:
在这里插入图片描述

所以说mysql支持远端登录,但是登录时要有远端账户才可以。

修改用户密码

再说一下password函数,这其实就是一个hash函数,可以将一个字符串转换成一段定长字符串:
在这里插入图片描述
可以看到就算是相差一个字符,结果都会有很大变化。

库中存放的都是这些加密后的字符串,这样做就是为了防止数据库泄漏之后像密码这样的重要信息不会丢失。

设置密码的语法有两种,一种是自己给自己设置密码:

set password=password('新的密码');

还有一种是root用户修改指定用户的密码:

set password for '用户名'@'IP'=password('新密码');

root改刚刚的张三:
在这里插入图片描述

不过Linux下不会回显密码,这里眼看不出来改没改密码,反正使用qwer登录的:
在这里插入图片描述

张三自己改自己:
在这里插入图片描述

也可以直接让user对表中的authentication_string做修改:
在这里插入图片描述

也是可以登录的,这里改的是tmp,我直接远端登:
在这里插入图片描述
这里Windows下能看到有登录的密码有四个字符。

权限管理

MySQL数据库提供的权限列表:
在这里插入图片描述

我在win下用tmp用户登录,查看库的时候只有部分库能够看到:
在这里插入图片描述

因为tmp没有其他库的权限,所以是看不到的。

而root就可以看到所有的库:
在这里插入图片描述

因为root的权限很高。

普通用户想要看到库的话得要有对应的权限。

给用户赋权

语法:

grant 权限列表 on.对象名 to '用户名'@'登陆位置' [identified by '密码'];

其中权限列表可以直接给all,也可以指定某些权限(一般都是CURD操作的权限)。

on库.对象名表示对哪个库下的哪张表进行赋权,如果想要对所有库下的所有表进行赋权就可以用*.*,如果想要对某个库下的所有表进行赋权可以用库名.*。

to表示给哪个用户赋权。

后面的identified by '密码’可以不用写。如果写了且用户存在,赋予权限的同时会修改密码,如果该用户不存在,就是创建用户。

我来用root账户创建一个库:
在这里插入图片描述

用tmp用户是看不到的:

还是和刚刚一样。

强行use一下:
在这里插入图片描述

而且当前这个tmp用户还没法创建库:
在这里插入图片描述

用root给tmp赋权刚刚的rootDB:
在这里插入图片描述
这里意思就是给rootDB库中的所有表赋权。

现在用tmp就能看到rootDB库了:
在这里插入图片描述

选中也没问题:
在这里插入图片描述
不过里面还没有创建表。

因为有所有的权限,tmp可以直接在里面创建表:
在这里插入图片描述

root此时也是能看到这张表的:
在这里插入图片描述

用root来插入两条记录:

在这里插入图片描述

tmp查看:
在这里插入图片描述

没有问题。

在root下可以查看特定用户的权限:
在这里插入图片描述

第一条可以不看,所有的用户都会有。

第二条GRANT ALL PRIVILEGES ON rootDB.* TO ‘tmp’@‘%’,就是刚刚给tmp赋权的操作。

普通用户可以看自己有哪些权限:
在这里插入图片描述

但是不能看其他用户的:
在这里插入图片描述

剥夺权限

这里tmp有所有的权限,用tmp插入一下:
在这里插入图片描述

如果不想让这个用户进行插入,可以去掉其插入的权限,也就是说root可以剥夺普通用户的权限。

语法:

revoke 权限列表 on.对象名 from '用户名'@'登陆位置';

可以剥夺指定权限,比如说剥夺insert :
在这里插入图片描述
在这里插入图片描述

不能插入了,但是还是能查的:
在这里插入图片描述

再来查看一下当前的权限:
在这里插入图片描述

蹦出来了一堆。

因为刚刚是所有的权限都有,这里将一个insert权限去除,查的时候是不会有insert的,但是其他的权限还要显示。可以看到上面没有insert。

也可以直接剥夺所有权限:
在这里插入图片描述
此时tmp用户就看不到rootDB库了:
在这里插入图片描述

show一下:
在这里插入图片描述
没有任何权限。

这就是用户管理,看了这篇之后就可以用root创建一个用户,然后用root创建一个库,给新用户赋权,后续就可以用这个普通用户来进行对特定库的操作了,相对来说更加安全。

到此结束。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集简云语聚AI新增模型测试,支持多模型同时进行交互,快速评估不同模型性能

语聚AI模型测试 在ChatGPT爆火的推动下,由生成式 AI 掀起的全球人工智能新浪潮就此拉开了序幕,人工智能也成为越来越多企业提升业务效率、优化业务流程的首选方案。 然而,面对层出不穷的AI模型,每个模型在完善度、功能性、易用性…

php5构造无字母数字的webshell实现任意命令执行

目录 引言 如果是在php7 如果是在php5 现在我们来上传文件 最后的结果: 看本篇前可以先看这一篇:利用异或、取反、自增bypass_webshell_waf-CSDN博客 引言 上一篇介绍了如何构造出一个无字母数字的webshell,但是如果后端的代码变成了这…

MIT线性代数笔记-第20讲-克拉默法则,逆矩阵,体积

目录 20.克拉默法则,逆矩阵,体积求逆公式克拉默法则用行列式关联体积 打赏 20.克拉默法则,逆矩阵,体积 求逆公式 考虑二阶方阵,有 [ a b c d ] − 1 1 a d − b c [ d − b − c a ] \begin{bmatrix} a & b \\ …

若依项目前后端部署记录

前言 本文较乱,用于笔者记录项目部署过程,对于想学习若依项目部署的同学看文章可能会导致误导,建议读者多查资料,保持疑问并谨慎验证。 项目官方指导: 环境部署 | RuoYi 1、环境部署相关 JDK > 1.8 (推荐1.8版本…

堆排序算法

我们之前学了堆: 数据结构---堆-CSDN博客 数据结构:堆的实现-CSDN博客 我们知道堆有小堆和大堆之分,根节点不是最小就是最大的,我们可以利用这个特点实现堆排序 思路: 为什么我们要选择堆排序呢 它的效率相比于冒泡…

【Java】浅析FutureTask的核心方法get

前言 在进行多线程编程时,我们离不开两个重要的任务接口:Runnable、Callable。一个线程想要运行,首先它得知道它的任务是什么(它要做什么),而这两个接口恰好是用于表示一个线程需要执行的任务。 Runnable和…

Vmware安装Centos7

CentOs7镜像文件下载 centos7 镜像文件下载-CSDN博客 配置虚拟机 打开Vmware,点击新建虚拟机 典型安装与自定义安装 典型安装:VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。 自定义安装:自定义安装可以针…

【Python表白系列】如何实现爱心光波的表白效果(完整代码)

文章目录 爱心光波环境需求完整代码详细分析系列文章爱心光波 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://w…

如何下载IEEE出版社的Journal/Conference/Magazine的LaTeX/Word模板

当你准备撰写一篇学术论文或会议论文时,使用IEEE(电气和电子工程师协会)的LaTeX或Word模板是一种非常有效的方式,它可以帮助你确保你的文稿符合IEEE出版的要求。无论你是一名研究生生或一名资深学者,本教程将向你介绍如…

【C/PTA —— 13.指针2(课内实践)】

C/PTA —— 13.指针2(课内实践) 一.函数题6-1使用函数实现字符串部分复制6-2 拆分实数的整数部分和小数部分6-3 存在感 二.编程题7-1 单词反转 一.函数题 6-1使用函数实现字符串部分复制 void strmcpy(char* t, int m, char* s) {int len 0;char* ret …

Python过滤掉特定区域内的矩形框

Python过滤掉特定区域内的矩形框 前言前提条件相关介绍实验环境过滤掉特定区域内的矩形框方法一:直接法(for循环遍历)代码实现输出结果 方法二:列表推导式代码实现输出结果 前言 由于本人水平有限,难免出现错漏&#x…

Vue2+echarts 实现图表的简单绘制

Echarts是一个基于JavaScript的开源可视化库,由百度开发和维护。它通过简单的配置方式,就可以实现各种复杂的数据可视化和图表展示。Echarts支持多种图表类型,包括柱状图、折线图、饼图、散点图、漏斗图等,同时还支持地图可视化和…

zabbix6.4.0配置邮件及企微机器人群聊告警

一、邮件告警 根据公司邮箱自行配置,电子邮件、用户账号密码填自己的邮箱账号密码 动作本次使用的默认的,如果为了更加美观可自行修改。 二、企业微信机器人告警 首先在企微上创建群聊,之后添加群聊机器人 将地址复制,后面用 …

0Ω电阻最大过流能力及作用用途

0Ω电阻最大过流能力及作用用途 0Ω电阻过流能力0Ω电阻的作用 0Ω电阻过流能力 0Ω电阻不一定是真正的0Ω电阻,0Ω电阻存在一定的阻值偏差,主要看生产电阻厂商做哪种了。厂商都是根据电阻标准文件 EN60115-2, 里头0Ω电阻实际最大阻值有 10…

五、关闭三台虚拟机的防火墙和Selinux

目录 1、关闭每台虚拟机的防火墙 2、关闭每台虚拟机的Selinux 2.1 什么是SELinux

Visual Studio2022创建Windows服务程序

文章目录 Visual Studio2022创建Windows服务程序打开工具创建新项目创建成功重命名服务添加安装程序编写逻辑生成程序安装服务打开服务启动服务停止服务卸载服务修改项目配置重新生成安装服务启动服务 Visual Studio2022创建Windows服务程序 打开工具 创建新项目 创建成功 重命…

【翻译】直流电动机的控制

直流电(DC)电机由于其转矩易于控制,速度控制范围广,已广泛应用于可调速驱动或可变转矩控制中。然而,直流电机有一个主要的缺点,即它们需要机械装置,如换向器和刷子来连续旋转。这些机械部件需要…

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件 一、论文总结PConv模块优势二、YOLOv51. yaml文件2. common代码文件三、YOLOv81. yaml2. modules文件添加3. Task文件4. 测试

播放器开发(七):音视频同步实现

目录 学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 原理 简单分析: 下图简单描述了在一个播放过程中,假设我们先播放音频,对比一个公共时间轴,视频就会始终比音频慢0.003s。 我们在日常中用一些播放器播放视频…

41 - 如何使用缓存优化系统性能?

缓存是我们提高系统性能的一项必不可少的技术,无论是前端、还是后端,都应用到了缓存技术。前端使用缓存,可以降低多次请求服务的压力;后端使用缓存,可以降低数据库操作的压力,提升读取数据的性能。 今天我…