【MySQL】视图 + 用户管理

news2025/1/17 13:46:08

视图

  • 前言
  • 正式开始
    • 视图
    • 用户管理
      • 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.coloradmin.cn/o/1280815.html

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

相关文章

perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的,但是有一些多人合作的项目或者一些历史遗留代码,常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例: 477033f938fd47dfecde43c82257cd286d9fa38e , …

数据结构之堆排序以及Top-k问题详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力 目录 1.前言 2.堆排序 2.1降序排序 2.2时间复杂…

充电桩新老国标兼容性分析

1、背景介绍 1.1、充电桩相关标准发展历程 1.2、兼容性分析历史 1.3、兼容性分析的目的 1.4、兼容性分析的内容 2、B类协议兼容性分析 2.1、协议分层结构 2.2、链路层分析 2.3、版本协商与链路检测 ## 2.4、传输层分析 2.5、应用层 2.5.1、应用层数据 2.5.2、应用层数据…

谈谈MYSQL索引

基本介绍 索引是帮助MySQL高效获取数据的数据结构,主要是用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低了CPU的消耗。 通俗来说, 索引就相当于一本书的目录,…

QML中常见布局方法

目录 引言常见方法锚定(anchors)定位器Row、ColumnGridFlow 布局管理器RowLayout、ColumnLayoutGridLayoutStackLayout 总结 引言 UI界面由诸多元素构成,如Label、Button、Input等等,各种元素需要按照一定规律进行排布才能提高界…

Java数据结构之《构造哈夫曼树》题目

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等(偏难理解)的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题…

kgma转换flac格式、酷狗下载转换车载模式能听。

帮朋友下载几首歌到U盘里、发现kgma格式不能识别出来,这是酷狗加密过的格式,汽车不识别,需要转换成mp3或者flac格式,网上的一些辣鸡软件各种收费、限制、广告,后来发现一个宝藏网站,可以在线免费转换成flac…

长度最小的子数组(Java详解)

目录 题目描述 题解 思路分析 暴力枚举代码 滑动窗口代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条…

MyBatis自动生成代码(扩展)

可以利用Mybatis-Generator来帮我们自动生成文件 1、自动生成实体类 可以帮助我们针对数据库中的每张表自动生成实体类 2、自动生成SQL映射文件 可以帮助我们针对每张表自动生成SQL配置文件,配置文件里已经定义好对于该表的增删改查的SQL以及映射 3、自动生成接…

数据层融合、特征层融合和决策层融合是三种常见的数据融合方式!!

文章目录 一、数据融合的方式有什么二、数据层融合三、特征层融合:四、决策层融合: 一、数据融合的方式有什么 数据层融合、特征层融合和决策层融合是三种常见的数据融合方式。 二、数据层融合 定义:数据层融合也称像素级融合,…

Chat-GPT原理

GPT原理 核心是基于Transformer 架构 英文原文: ​ Transformers are based on the “attention mechanism,” which allows the model to pay more attention to some inputs than others, regardless of where they show up in the input sequence. For exampl…

10 分钟解释 StyleGAN

一、说明 G在过去的几年里,生成对抗网络一直是生成内容的首选机器学习技术。看似神奇地将随机输入转换为高度详细的输出,它们已在生成图像、生成音乐甚至生成药物方面找到了应用。 StyleGAN是一种真正推动 GAN 最先进技术向前发展的 GAN 类型。当Karras …

6-13连接两个字符串

#include<stdio.h> int main(){int i0,j0;char s1[222],s2[333];printf("请输入第一个字符串&#xff1a;\n");gets(s1);//scanf("%s",s1);printf("请输入第二个字符串&#xff1a;\n");gets(s2);while(s1[i]!\0)i;while(s2[j]!\0)s1[i]s2…

python--自动化办公(Word)

python自动化办公之—Word python-docx库 1、安装python-docx库 pip install python-docx2、基本语法 1、打开文档 document Document() 2、加入标题 document.add_heading(总标题,0) document.add_heading(⼀级标题,1) document.add_heading(⼆级标题,2) 3、添加文本 para…

IdleStateHandler 心跳机制源码详解

优质博文&#xff1a;IT-BLOG-CN 一、心跳机制 Netty支持心跳机制&#xff0c;可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中&#xff0c;客户端和服务端定时向对方发送数据包通知对方自己还在线&#xff0c;保证连接的有效性的一种机制。在服务器和客户端之间一…

深度学习记录--梯度下降法

什么是梯度下降法&#xff1f; 梯度下降法是用来求解成本函数cost函数中使得J(w,b)函数值最小的参数(w,b) 梯度下降法的实现 通过对参数w,b的不断更新迭代&#xff0c;使J(w,b)的值趋于局部最小值或者全局最小值 如何进行更新&#xff1f; 以w为例&#xff1a;迭代公式 ww-…

Go连接mysql数据库

package main import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" ) //go连接数据库示例 func main() {// 数据库信息dsn : "root:roottcp(192.168.169.11:3306)/sql_test"//连接数据库 数据库类型mysql,以及数据库信息d…

【数据库】基于封锁的数据库调度器,以及等待锁处理的优先级策略

封锁调度器的体系结构 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

LeedCode刷题---子数组问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、最大子数组和 题目链接&#xff1a;最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连…