在这里插入图片描述

前言

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

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

正式开始

视图

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

语法

create view 视图名 as select语句;

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

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

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

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

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

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

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

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

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

emp表和dept表都是基表。

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

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

可以看到修改了。

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

可以看到也修改了。

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

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

视图规则限制

用户管理

user

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

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

这些库中有很多表结构

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

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

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

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

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

默认情况下,用户mysql.sessionmysql.sys已被锁定,使得数据库操作人员无法使用两个用户通过客户端连接MySQL服务器.因此,建议不要随意解锁使用mysql.sessionmysql.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用户还没法创建库
在这里插入图片描述

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

到此结束。。。

原文地址:https://blog.csdn.net/m0_62782700/article/details/134715232

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46974.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注