【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创建一个库,给新用户赋权,后续就可以用这个普通用户来进行对特定库的操作了,相对来说更加安全。

到此结束。。。

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

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

相关文章

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

VMware Workstation Pro 17及 Windows 11 虚拟机的安装与激活

六点钟: 吃晚饭吗 不吃,胖胖 十点钟: 阿昊要吃夜宵对不对 ——CSDN,记录牛马生活 本文是在学习 Linux 期间,使用 VMware 时顺带学习 Windows 11 虚拟机的安装与激活 VMware Workstation Pro 17及 Windows 11 虚拟机…

Java Throwable

如图展示了 Java 整个异常体系的关系。 Throwable 的 Java 异常体系的基类, 他的直接子类有 Error 和 Exception 2 个。 1 Error Error 表示的是由于系统错误, Java 虚拟机抛出的异常, 例如 Java 虚拟机崩溃, 内存不够等, 这种情况仅凭程序自身是无法处理的, 在程序中也不会…

004、简单页面-基础组件

之——基础组件 目录 之——基础组件 杂谈 正文 1.Image 1.0 数据源 1.1 缩放 1.2 大小 1.3 网络图片 2.Text 2.0 数据源 2.1 大小 2.2 粗细 2.3 颜色 2.5 样式字体 2.6 基础示例 2.7 对齐 2.8 省略 2.9 划线 3.TextInput 3.1 输入类型 3.2 提示文…

量子测量-技术点杂录

目录: 高质量文章导航-持续更新中_GZVIMMY的博客-CSDN博客 前置:量子测量设备 电子显微镜:电子显微镜可以在非常高分辨率下观察生物组织、细胞和分子结构。通过调整电子束的强度和聚焦来观察细胞内部的微小结构。但是,电子显微镜需要对样品进行切片处理,而且在真空中进行…

HbuilderX 项目打包文件过大问题优化

文章目录 HbuilderX 项目打包文件过大问题优化主要操作收效甚微,但又有那么点用的方法使用 gulp 压缩(最后一步)使用与配置 网上找的 gulp 优化压缩配置还未尝试可能有用的方法 尝试过程中看到的一些优质文章 HbuilderX 项目打包文件过大问题…

Shell循环:for(三)

示例:使用for实现批量主机root密码的修改 一、前提 已完成密钥登录配置(ssh-keygen)定义主机地址列表并了解远程修改密码的方法 [rootlocalhost ~]# ssh-keygen #设置免密登录[rootlocalhost ~]# ssh-copy-id 192.168.151.151 二、演示…

科研学习|论文解读——Open government research over a decade: A systematic review

Open government research over a decade: A systematic review 十年来的开放政府研究:一个系统性综述 摘要 在过去十年中,对开放政府的学术研究蓬勃发展。然而,对开放政府的全面审查是有限的。这一研究空白不仅阻碍了我们对开放政府整体知…

mysql区分大小写吗

mysql在windows下默认是不区分大小写的,在linux下默认是区分大小写的。 所以,为了避免出问题,许多公司的数据库编程规范中明确规定:库名、表名、列名、索引名一律小写,不同单词之间以下划线分割,且控制在3…

重庆市失业金申领流程

1.领失业金的前提:非本人意愿中断就业。个人理解就是不是主动辞职才能领。 2.因此公司在处理社保减员的时候,不能是劳动者主动提出离职。 3.社保减员可选择原因:其他原因中断缴费 / 由单位提出双方协商一致解除劳动合同。 4.当社保暂停缴费…

算法——滑动窗口

滑动窗口大致分为两类:一类是窗口长度固定的,即left和right可以一起移动;另一种是窗口的长度变化(例如前五道题),即right疯狂移动,left没怎么动,这类题需要观察单调性(即指针)等各方…

以下哪项不是在内蒙古举办的?()

需要查看更多试题和答案,可以前往题海舟(题海舟)进行搜题查看。可以搜“题干关键词”。 以下哪项不是在内蒙古举办的?() A.中蒙博览会 B.东北亚区域合作高峰论坛 C.中蒙俄合作高层论坛 D.中日经济合作会 …

C++基础 -32- 逻辑运算符重载

逻辑运算符重载格式 bool operator&&(data1&a,data2&b) {if(a.a&&b.a){return true;}elsereturn false; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int a):a(a){} };class d…

(数据结构)顺序表的查找

静态分配代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct LinkList {int data[MAX];int lenth; }Link; //初始化 void CreateList(Link* L) {L->lenth 0;for (int i 0; i < MAX; i){L->data[i] 0;} } //插入 …

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概4500多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

计算机网络扫盲(2)——网络边缘

一、概述 在计算机网络得到术语中&#xff0c;我们把与因特网相连的计算机或其他设备称为端系统&#xff08;或者主机&#xff09;&#xff0c;如下图所示&#xff0c;因为它们位于因特网的边缘&#xff0c;所以被称为端系统。因特网的端系统包括了桌面计算机&#xff…

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

蓝桥杯day03——Bigram 分词

1.题目 给出第一个词 first 和第二个词 second&#xff0c;考虑在某些文本 text 中可能以 "first second third" 形式出现的情况&#xff0c;其中 second 紧随 first 出现&#xff0c;third 紧随 second 出现。 对于每种这样的情况&#xff0c;将第三个词 "th…

Android布局控件之LinearLayout、RelativeLayout、GridLayout、ScrollView

线性布局&#xff08;LinearLayout&#xff09; orientation horizontal:水平从左往右vertical:垂直从上到下若不指定orientation属性&#xff0c;默认为水平 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http:…

什么是DDoS攻击

DDoS攻击 1. 定义2. DDoS攻击类型2.1 网络层攻击2.2 传输层攻击2.3 应用层攻击 3.DDoS攻击态势特点 1. 定义 分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式。攻击者利用恶意程序对一个或多个目标发起攻击&#xff0c;企图通过大规模互联网流量耗尽…