00:00
行同学们,咱们接着往下看,这个第二节呢,叫做权限管理啊,我们第一节呢,讲的叫用户管理,咱把这个用户呢给创建好了,创建好以后的话呢,我们是不是需要呃拿着这用户呢去做相关的操作了,那么这个操作能做什么,不能做什么,我们一定需要通过权限呢去做一个体现啊举个简单的道理,你比如说我们在这个呃150这个里边呢,咱们通过这个入的用户呢,咱们是不是创建这个张三了,对吧?然后创建完张三以后呢,咱们通过张三呢也登录了,那登录好以后的话呢,我们如果呢,呃,这个。只是登录了对吧,我们通过这个叫show data basis。去做查看的时候呢,你发现呢,这个张三用户呢,只能够查验出来,查看出来我们默认的这样的一个,呃,相当于数据库,那真正跟我们业务相关的这个数据库,包括里边这个表的一些DML操作这个权限呢,都没有,那这样呢,显然是不行的,那光登录一下没有意义了,那此时呢,我们就必须呢,给这个用户呢去赋予权限。这呢,就咱们这一节呢,想要讲的问题,说呢,关于MYSQL权限的理解呢,说我们就可以看作是MYSQL允许你做你权利以内的事情,不可以越界啊,如果只允许你查询某个表的权限,你就不可以具备啊,这个修改的这样的权限啊,你是这个北京市的这个市长,你不能跑到河北省里边呢去呃做一些操作是吧,这就超出你职权范围了啊,就越权了啊就是这样的一个问题。
01:25
好,这呢就是我们所谓的这个权限管理,那首先呢,提到一个说我们MYSQL当中到底都有哪些权限呢?啊,这里边我们可以通过这样的一个指令呢去查看啊,我们回到这个比如root用户这块吧,我们可以呢去show一下叫pre villages。诶,这样的一个操作,这儿呢,一共列出来了啊62项,这个62项呢,其实对应的就是这样的一些权限了,对吧?那这呢,还有关于这个权限的一个具体的描述,它是什么样的作用,那简单的来说,我们这些权限的话呢,我可以分成了这样的,呃,三个级别,比如说呢,是针对于表啊关的一些权限,比如说我们针对某个表是不是具备这个查询,添加,修改,删除啊,创建这个这个呃,删除这个是删除我们表数据了,这个是删除我们这个相关结构的对吧?等等等等这样的一些权限,还有呢,是针对于具体一些列的。
02:19
你看我们这个力度呢,还是比较小的,这不光是到这个表级别了,还可以表的下一级,针对具体某一个列是不是可以这个有DL相关的这个操作,那过程的权限呢,针对的就是我们说的存储过程啊,存储函数啊啊来进行赋予的。OK啊,上面也关于这个一波一波的这个权限呢,进行一个介绍啊,我这呢就不多说了,就是呃,大体上的话呢,大家知道呢,我们涉及到的其实主要呢,就是针对于表这块的一些权限。好,那么关于这个权限赋予这个原则是什么样的呢?这块呢有几个经验,大家呢把它记一记。啊,这个其实一说呢,大家都能都能明白啊,第一个的话呢,就是只赋予能够满足需要的最小的权限,防止用户呢干坏事儿啊这个有的时候呢,他不是主动啊,有意想干的,他可能无意做了这样的操作,那为了呢,呃,这个避免他这种无意或者有意的这个操作呢,干脆我们权限在给予的时候,就是给予他能够满足需求的最小权限。
03:12
比如说针对某个表,我们只需要查询就可以了,那你就没有必要呢,把这个update insert和delete权限呢放给他。嗯,很自然的对吧,第二呢,就是创建用户的时候呢,限制用户的登录主机,比如我们只限制他在指定的IP下呢,才能够进行登录,出了这个段呢就不行。你像咱们大家呢,经常知道的就是在大学的时候,你在图书馆,或者你在这个具体你们学院的自习室里边,你可以呢,登啊这个你们学校的这个内网啊,登上以后呢,是不是有这个知网的这样的一个入口,你可以呢,去访问这个,呃,查看论文对吧?但是你出了这个你学校以后呢,你再去查看就查看不到了,那是实际上呢,是它就限制了具体这个IP了。还可以呢,为每个用户呢,去设置满足密码复杂度的一个密码,这个咱们上面讲了这个密码的一个管理了,在下边儿呢,定期清理不需要的用户回收权限,或者呢是删除用户,这个呢就是管理的一个策略,那这个呢,我一说大家都能明白,那实际呢,在生产环境当中操作的话呢,要注意这样的问题。
04:10
下边呢,我们来看一看具体的这个权限的一个赋予是什么样子的,这个权限赋予的话呢,有两种方式,那这个呢,是咱们从这个MYSQL8.0的角度来讲的一种呢,就是我们直接呢,给这个用户呢,去赋予相关的权限。第二种的话呢,是我们呢,把这个权限呢,把它呢,诶封装在一个角色的一个概念里边,然后把这个角色呢,赋予给了用户啊,比如说我们是有一个叫销售部经理这样的一个角色,然后销售部经理有什么样的权限呢,我们都封装在这个角色里边,然后把这个角色呢,赋予给比如张三啊张三呢就是销售部的经理了,他的权限呢,有什么什么就自动就有了这样的两种方式,对吧?那关于这个角色呢,咱们到后边这个五的时候呢,再说咱们先来看这个直接赋予是什么样子的。具体的指令呢,是这样来写。Grant啊,下边呢,就是我们对应的一个一个的权限,然后on是针对于哪一个数据库的哪一个表的啊这样的一些权限,然后给了谁,那就这样的一个方式,好那回过来呢,我们这儿呢,做一个演示。
05:10
这个做演示的话呢,我们先呃悠着点哈,这个这块我们先注意一个小细节,就是咱们在前边呢,演示密码修改的时候呢,我把入的用户和张三用户的密码都改了,这个我怕后边忘了,咱们呢先我再改成一个我常用的这个al user叫做user当前这个是吧,用户啊BY,然后改成ABC123别后边呢,我退出以后呢,我再登录进不来了。An user identified by,他这提示我啊,Identified写错了。这个是吧,好回撤一下行,这呢,我们这个入的用户呢,我就改了,我我测试一下啊,那我先做一个退出。入的用户啊杠P啊,我就直接写这了啊OK啊行没问题,然后这个张三的话呢,咱们也改一下吧,你改张三呢,可以在这改也可以,是不是在我们这个位置改,那我在呃用这个入的用户这块去改也行啊,叫张三。
06:06
然后呢,是不是,哎这个同被符是吧,哎整体。By abc123啊,我也改成它吧。行,这个我们这呢测试一下啊,首先我们做个退出。张三是吧,然后呢,杠PAABC23行,这个呢,我后边呢就不会乱了啊,要不忘了还挺麻烦的,那现在的话呢,我们看一下这个张三,此时呢,这个张三呢,他这个权限呢,其实是比较小的,那我们可以查看一下,这个呢叫收S啊,一会儿我们也会收到这样一个指令,目前的话呢,这哥们儿呢,这个权限呢,非常小,只是呢,相当于具备一个登录这样的一个权限了,那我们刚才也看到了,咱们去show data。Basis的时候呢,你看这个呃,非常的少是吧,现在呢,比如说我们想让这个张三呢,他去操作某一个表啊,这个我们先这也查看一下这个data basis。我们想让他去操作我们这个数据库里边那个E那个表吧,然后那个表呢,我们给他一个比如说select和update的一个权限,那我们就可以这样写,说叫grant什么呀,我们叫做select。
07:13
Update。也别写错了,然后呢啊DB test1这个数据库下的啊,如果说你要说所有的表都给,那咱们就用个点星也可以,你要说只给EP,那就只这样写,那就这个意思,那么给点星吧,然后呢,呃,这个on它,然后谁吐是吧,咱们张三。然后呢,这个百分号一放,诶一回车这就可以了。行,那这呢,就相当于我们把这个权限呢,就付给他了,然后回过来,那此时的话呢,我们再去售一下data basis,大家你会发现呢,是不是我们就多了这样的一个数据库了啊,同时呢,我们再去这个下,大家你会发现呢,我们是不是具备了这个select update的关于这个数据下的啊,所有的表的一个权限是吧?好,那此时呢,我们就可以去use一下,叫DB test1,然后我们去select,或者我们show一下tables。
08:05
这样来我们这里边看有好几个表,OK,然后呢,我们可以去select from一下E。好,这个表里边你看有两条数据,那此时的话,我们说具备这个还有一个权限,是不是叫update呀,我update啊这个E,然后set一下,比如说叫l name,等于我改成叫Jerry吧。然后where ID等于一,是不是我们把这个ID等于一这个数据呢,就可以做个修改或再做个select,是不是就改成Jerry了?啊,没有问题是吧,这就我们说修改,然后呢,我们试图呢,去做一个delete。哎,Delete from一下我们E1,然后where ID等于一,我想把ID等于这条数据给删掉,一回车发现呢,我们这时候呢就失败了,Delete这个command命令呢,被denied被否定了,因为咱们不具备这样的权限。你看这时候呢,是不是就非常的清晰是吧?哎,非常的清晰,好,那这块的话,如果你想删除,我们还可以继续的去grant一下,比如说叫delete。
09:05
那delete,然后2DB test一点星,然后呢,还是给到我们这个张三。诶这样是吧,还有一回车这样的话呢,我们这个张三注意啊,就是大家你看我们这时候呢,让一下这块又让一下,有同学说是不是我们这个让呢,还是针对于张三这个人,是不是把上面这个给覆盖掉了呢?注意不是。相当于在我们原有的这个权限的基础之上呢,我们有新增的权限,所以呢是一个呃,这个并集的意思,也就是说此时呢,我们针对于这个数据库下的所有的表,张三呢,都具备了查询修改和删除的权限,那接着呢,我们再回过来。啊,你比如说这个时候呢,我们先做一个查询啊,证明你看是没有问题的,对吧,然后此时呢,我们做一个delete。啊,这个delete操作呢,说呃,被迭代的了啊,那这时候我们必须得怎么着呢,咱们先退出一下啊,我再登录进来。杠U叫张三是吧,然后杠P,然后就写到这了,ABC123,然后此时的话呢,我们去use一下咱们的DB test1这个数据库,然后我们做一个delete。
10:07
哎,把它选中复制一下。粘贴啊回车好,这时候你看我们是不是把它给删掉了,然后我们再去做一个select星from一下。啊延P此时的话呢,我们把这个idv的这个数据就删掉了。好,这呢就相当于是我们看一下如何去赋予这个权限的问题,对吧,那么复议权限这块呢,有一个特殊的情况是这样子的,那这呢咱们再去创建一个吧。啊,我create一下这个叫user,咱们叫李四。嗯,然后我我我我这就不写了啊,默认的就还是这个百分号,就相当于是任何IP地址下都可以identity。呃,Find five abc123行,我呢是不是又创建了一个用户啊好,那我创建用户呢,然后此时呢,我们去grant这里边呢,有一个特殊的一种操作呢,叫all privilege。
11:00
这个光标拿走。诶,Grant all privilege,就是把所有的权限呢,都赋予啊,给谁呢啊,所有的这个数据库下的所有的表。是不是有一个星点星对吧,然后呢,这个兔咱们的李四。嗯,然后这块呢,我们再加上一个这个到乐谱这样写吧,哎,回撤一下就可以了,那有同学说想可能就说这个李四这个权限呢,好大呀,啊,那确实是好大呀,来我们在这个双击一下。嗯,再做一个这个连接,此时的话呢,我们通过这个李四呢,去连接一下啊杠U李四啊杠PABC123,我就写这了,然后呢,我们此时呢,去受data basis。好,大家你会发现呢,你看此时我们查到这个数据库呢,确实是不是非常多呀,然后呢,我们去use一下,比如说咱们这就只有这一个,咱自定义的,诶我们去这个show。这个tables是吧。诶,你看这块都有,然后针对具体里边每一张表的增删改查的权限呢,其实也都有select形from e,你看这块都有是吧?哎,你也可以呢,去insert into一下咱们E,然后values,这给我来一个三,比如来一个这个。
12:17
嗯嗯,我加给他吧,这有时候我用这个来表示我的这个名字啊,好也可以,你看是不是我们就也添加成功了,再select的话呢,是不是就也加进了,加进去了是吧,没有问题。行,那就相当于我们这时候这个李四这个权限啊,确实是挺大的,我们受一下。S,诶走一下,你看这里边就很多啊,那有同学可能会想说,诶老师,那你看我们这个通过入的用户啊,把所有的权限都给了这个李斯了,那此时呢,这个李四这个权限能不能达到跟入的用户一样的这样的一个程度呢?哎,入的用户的话呢,你看你有对应的权限,我们把所有的权限都给你了,你要想呢,这是皇帝,皇帝说我有什么权限,我就全给你了,那想想这时候太子呢,是不是说,诶,我好像也成了一个二皇帝了,是吧?哎,我们说呀,这里边关于路的用户和我们这个李四啊。
13:07
只有一个区别。大家能想到吗?他说哎,老师,那我知道唯一的区别就是这个名字长得不一样是吧,这是四个字符,这是呃仨字符啊,不是这个意思啊,这个时候呢,还是有区别的,区别在哪儿呢?那那就是你看咱们入的用户呢,是不是可以把权限赋予给张三,赋予给李四,赋予给王五等等等等都可以,那么我问大家一下,你说我们李四呢,有这样的权限去给别人去赋予权限吗?啊,所以说还没想过这个事儿是吧,诶那这呢,我就告诉你这个入的用户和我们这个李四啊,当然名不一样,这个就别说了啊,他们俩的话呢,在权限层面呢,只有一个区别,就是默认情况下呢,我们的张三也好,李四也好,咱们创建的这两个用户呢,他是没有给别人赋予权限的能力的。你比如说李四的权限很多,他不能够付给王五,那要给王五付,只能是root用户来付,那这块我们怎么来看呢?你可以在这个root用户这块,我们去授一下叫是吧。
14:04
在这个受的时候呢,你看这块也挺多的,我们最后会发现它有一个这个。叫with grant option,然后我们回到咱们这个李四这块呢,它后边就没有。嗯,With grant option,它就没有张三当然更没有了,那区别呢,就在这儿,也就是说如果啊,咱们在这写这个grant这个权限的时候呢,最后加一个参数叫with grant option,你要加上他了,比如我们加上这个给李四,那李四呢,就可以把他自己的权限呢付给别人,你要没加,没加他们谁都不行。只有入的用户才可以。啊,这个大家你注意一下啊,我就不演示了,那再一个呢,下边的提到就是这个叫权限叠加的意思啊,刚才我也讲到了,就是我们给这个张三呢,先赋予了是这个这俩权限,后边又给了一个,这时候呢,是一个叠加啊,不是一个覆盖啊,是一个叠加。好,下边这块呢,提到了一个概念,叫做横向的分组和纵向的分组,其实没啥这个特殊的那种啊,就是一个概念性的,所谓的横向呢,就是表示用户呢,可以接触到数据的一个范围,你比如说我们相当于是这个位置。
15:06
就这个位置啊,这个让这个在这儿的这个赵这个用户了,在我们这儿呢,就是张三用户或者李四用户,你想让他呢,接触到哪个数据库啊,哪些表啊,这个呢,是我们说的叫横向的范围,那么所谓的纵向的一个分组。指的就是针对我们这个数据库也好,表也好,能够访问到什么程度,呃,能看呀,还是能改啊,还是能删呀,那其实对应的是不是就我们前边上上边这个前面对应的一些这个权限问题啊,把这个呢,我们称为它叫横向的分组,把这个呢,相对应的叫诶纵向的一个分组。那针对用户呢,你不就是相当于得告诉他针对于哪些数据库,哪些表,能做什么样的事儿吗?这是体现权限的地方,这是体现你的一个范围的地方,对吧?啊就是这个意思。好,那么下边呢,就是如何查看权限,刚才其实咱已经说了,你就用这个就行,查看当前用户的权限啊,或者叫for current user user,用一个函数那都行,你也可以呢,在这个比如root用户下呢,我们可以收for,加上例四,那这样也行,我就不示了。
16:08
啊,这就过了。接着往下看,那么我们能够给他赋予权限,查看权限,是不是就有能力去回收权限呀?啊,就跟说呢,你自己挣了钱啊,都给媳妇儿了啊,当然这个例子我举的不好啊,那很多人的话呢,是不是这个都能往里放,放进去的话取不出来是吧?啊那这换一个例子啊,咱先举一个这个咱开发中的例子,比如说呢,这个像呃,Java也好,或者这个C语言也好,C加也好,我们都有类似的是不是这个容器的这样的概念啊,啊比如说在Java里边呢,我们体现的就叫集合了啊,或者叫数组,对吧?啊集合里边有很多种数据结构,我们把这个数据呢放进去。我能往里放,那么我们是不是也有能力呢,往外去取呀,比如通过索引的方式去取,通过K的方式呢,去取这个VALUE6对吧,能放能取,那你要往能放不能取这个就不太合理啊,就跟说你把钱给你媳妇了,这个拿不出来啊,这个生活中这这这得合理是吧?这算是合理的啊,要合理的加个引号是吧。
17:04
行啊,理解这个事儿,那这里的话呢,我们能够给一个用户去赋予权限,那我就得有能力回收啊广能给不能回收,那这个就出问题了。好,那么如何去回收呢?对应的这个单词我们叫做revoke。啊rework,诶说这个回收呢,这个不必要的权限呢,在一定程度上呢,也能保证安全性啊,你比如说给他的权限给大了,后边这个人的这个职位呢,降低了,降低了你就可以把这个权限再回收回来,那职位要升高了呢,升高就再给他加权限呗,那就是权限叠加对吧。OK。行,那这块呢,我们去回收权限呢,用的叫revoke,然后on哪个数据库下的哪个表,后边呢,注意不是to了,To是给他,然后这块呢是从他这拿回来,所以叫from。这是英文当中的to和from的区别,这俩呢,应该是最不容易混的。行,那下边我们就来演示一下,来回过来咱们在这儿。嗯,这个以谁来说理,张三来说吧,张三的话呢,你看我们现在select from是不是张三具备这个表的一个查询权限,对吧?好,那我们回过来呢,把这个权限给它回收掉,诶,Revoke,嗯,咱们叫select吧。
18:12
哎,Select,然后呢是on,咱们DB test1这个数据库下这个所有的表都给他。调回来吧,针对这里边是吧,From,然后张三。哎,这么着一下,诶是不是就可以了,呃,Rework行,那回过来以后呢,你看这时我们先去再做个查询,你发现也能查,主要原因是因为我们当前呢没有退出,退出以后呢再进来。张三。ABC啊123好,那这时候呢,我们再去执行,先去use一下DB t1是吧。再去执行我们这个查询。诶回过来看再来是吧,然后查询好,这时候你会发现呢,就不让我们去查了,原因就是因为我们把这个权限呢,给他都回收掉了。啊OK,然后再来,咱们再去演示一个叫revoke啊or啊prevail这意思。
19:05
Prevail。LY,这意思是吧,好,然后呢,嗯,二。哎,星点星,哎from一下啊,这个咱们叫李四。哎,这样百分号,哎,OK是吧,哎,这我又写错了privilege。嗯,啊,说这个呃,权限否定了你需要呢,至少有这个叫system user这样的这个权限啊,因为这里边你看我们说的这个权限呢,是非常多的是吧,说呢,你得有这样的一个权限,这个是咱们说入的用户的,那啊入的用户原来权限还不是说什么都有是吧,那我们给入的用户自己付一个权限吧,叫grant这个权限。那给它加一下这个啊啊星点星是吧,然后呢,呃,这个兔呗。吐,咱们入用户。
20:03
嗯,这么着。诶这样是吧,好,那给这个入的用户呢,我们加了这样的一个权限之后呢,咱们再去执行这个。诶,周齐哎,就可以了,行,那这样我把这个李四这个所有的权限呢,就都给他回收掉了,那再回过来看一下这个李四。到这儿我们先退出一下再登录。比四杠PAABC123好,那此时我们再去说一下,叫得塔。Basis是吧,那这时候你看是不是就回归到最原始的这个情况了,我们去show一下gras。嗯,那这时候你看是不是又是最原始的这个情况权限呢,就很少了,原来我们一打开是不是这么多权限,好这呢,就是我们演示一下这个权限呢,该如何进行一个回收,那这块大家注意一下。最后的话呢,我们这块有个小结,这个小结呢,其实还挺重要的,在我们实际开发当中呢,是具有指导意义的。
21:01
说有些程序员呢,总喜欢用这个入用户呢去来访问数据库。啊,完全的把这个权限的控制啊,放在应用层呢去实现,比如说呢,不具备什么样的权限呢,我们在应用层呢,去做这样的限制,对吧,就是这个意思,可不可以呢?可以啊,能做到这样的一个实际的这个需求能满足是没问题的,但是呢,我们不建议大家这样去做,这个原因呢,主要是有两点。第一点的话呢,就是我们如果用root用户去登录的话呢,就意味着我们root用户,包括他的这个密码是不是都在相关的配置文件当中做体现,对吧?那这时候呢,我们有可能就会暴露咱们这个root用户的一个密码,那一旦暴露出去以后呢,我们数据库呢,相当于是完全就失去保护了,因为root用户的权限是极大的啊,你的数据库呢,相当于就完全的暴露出去了,安全性就没有保障。对吧,哎,这是一个问题。好这一点,然后另外一点的话呢,就是明明我们可以不用入的用户的,也不用你在应用层面做这样的限制啊,为什么呢?因为MY呢,关于前线的控制啊,是非常完善的,而且呢,你看他还在8.0当中引入了角色这样的概念。
22:07
啊,就是使得呢,我们整个关于权限的控制的就是非常的力度非常的低,你看我们都限制到是不是具体的关于某一个列它的权限的一个控制的,所以呢,我们完全没有必要呢,在应用层呢,这样的去多此一举做这个操作,完全我们把这个权限呢,就下放给这个MYSQL数据库服务器去做就行,所以说呢,我们就可以选择具体的用户呢做登录,然后呢,把这个权限呢,就控制在你具体的用户里边就OK了,啊提高效率,安全可靠,OK这呢就是我们的一个结论。行,那我们就先说到这儿。行同学们,咱们接着往下说,那第三个点呢,叫做权限表对吧,那这呢是解决什么问题呢?诶大家看啊,咱们前面呢说了这个用户如何创建对吧?包括针对于创建的用户呢,我们该如何给他赋予权限,包括呢,还有回收权限这样的行为,这呢都属于具体的应用层面的。
23:00
啊,那么我们具体如果要讲解说在哪些,呃,这个层面啊,或者我们数据库底层他是怎么记录的,这个用户的创建是吧,你都创建了哪些用户啊,包括呢,我们这个用户该具备哪些权限呀,如果呢,这个权限啊,用户呢,操作权限超出了赋予的权限了,就告诉我们说失败了,对吧,他一定是不是在某些位置做了一些记录啊,那咱们的第三点和第四点呢,实际上呢,就是在说这个记录的情况,以及呢,我们一条这个查询过来了,说你当前的用户呢,你是不是具备查询这个表的权限,我们如何去进行核实的。啊,这就是我们第三点和第四点的内容,说白了这个三跟四啊,就是一跟二的一个底层的一个实现的原理。啊,那这块儿呢,我们相当于是不光要知其然,还要知其所以然,那如果在面试当中,那问到你一跟二的话呢,那其实呢,这个就非常简单了,对吧?但如果要问到你说它底层是怎么去做的啊,如何来啊MYS,我们说它的这个权限控制非常完善嘛,但如何实现这个完善的这个权限控制的呢?我们就要说这个三和四了。
24:05
啊OK啊,就是比较高级的一个内容行,那首先呢,我们来看这个三说呢,MYSQL这个服务器啊,通过权限表来控制用户对数据库的一个访问,那所谓的这个权限表具体指的是谁呢?有这样几个啊,首当其冲的叫做优色表,还有DB表,还有呢叫table啊,这个PRV呢,就是我们说就这个限的意思是吧,Table的权限列的权限,这个呢,你可以叫过程权限是吧,就是存过程那个那个单。这个前几个字母,那通过这样几个表呢,我们去体现这个叫权限的一个访问的一个控制啊,就是我们所指的这个叫权限表,就这几个。那大家呢,有个印象。好,那么这几个表呢,都存放在MYSQL数据库当中,诶同学想说这这这有啥可说的,不就是MYSQL数据库,那还能是其他数据库啊来注意这里边咱们指的MYSQL数据库啊,说的是谁啊,说的具体的就是这个数据库啊,不是泛泛的,咱们讲说MYSQL数据库的意思啊,就说的是他。
25:06
啊,就是这个,所以呢,我们这个,呃,如果咱们去先呃use一下叫MY对吧。Ex,然后呢,我们可以呢去叫show tables,那这里边呢,就能够查看到我们刚才提到的这样几个表,那一共呢,是不是有35个表,嗯,我们提到了关于这个DB表,关于这个user色表,User表在最后呢,还有呢,我们叫table啊,这是这个存储过程的这个,还有我们这个嗯,Table的这个,哎,我们这个列的叫column是吧?诶在这儿呢,诶我们刚才提到的这样的几个权限相关的表呢,那都有,就是在我们这个数据库下啊,是这个意思。那么在这个MYSQL启动的时候啊,服务器呢,就会将这些数据库表中的这个权限信息的内容读入到内存当中,就是我们现在的这些表呢,就会做一个加载,然后呢,当用户那首当其冲的是不是用户呢,首先会考虑做一个登录啊,你比如说我们在这个位置啊,咱现在呢,比如说做一个quit啊推出了,然后我们MYSO后杠U啊叫这个张三。
26:05
那张三的话呢,接下来他是不是ABC123是我这块要登录啊,登录的话呢,我们一回车登录成功了,或者登录失败了,这时候呢,就开始做这个验证了,那实际上这个过程呢,就是咱们一会儿这个四要素的叫连接的一个核实阶段。那这个核实呢,是去哪核实的呢?实际上呢,咱们已经给大家呢,前面都讲过了,就是用的咱们这叫user这个表。对吧,User表好,那我们这块呢,首先de先这么找一下吧,先select,咱们前面不也看到过吗?一个呢叫host。嗯,那个有个单词不太好写,我先这样吧,Disa一下这个user啊,诶我们呢,去select一个呢叫host,一个叫user,还有一个呢,是我们这个密码这个对吧,哎,我们把它呢复制一下过来。来一下我们这个user,那也就是说呀,咱们在这个诶。诶这个怎么下不了了,咱们在这个一开始呢,登录的时候呢,我们就会去检查一下,你这里边呢,是张三对吧?嗯,咱们在哪呢?在这儿啊是张三,然后这个杠开没写,那就默认是我们这个当前这个,呃相当于是local host一样是吧,那我们这儿呢,是不是任何的IP地址都可以访问了,那再者的话呢,我们就看一下这个密码,呃,你是不是能够是呃允许我们来登录的,就是密码呢,也需要做个校验,如果呢,这个都满足了啊,我们就表示呢,你是连接成功了。
27:26
啊,没有问题的是吧,啊这呢,就是我们说的,呃,这个事儿啊,然后的话呢,诶。看我这个啊在这儿啊,然后的话呢,我们看一看我们这个优色表里边,除了刚才咱们说的这样几个字段之外呢,还有其他的几个字段啊,其他这个字段呢,都是什么情况啊Di user,咱们对这个表呢做一个剖析。这个表的这个字段你看挺多的啊,51个字段,我们简单的了解一下,刚才呢,我们提到了几个比较重要的字段,一个呢叫host,一个呢叫user,还有呢,就是刚才提到了一个啊authentication啊,String,这个在5.7之前呢,这个字段呢,就叫password啊,一看就知道是密码了,然后后来呢,5.7以后呢,改成了是这样一个字段了。
28:11
那除了这仨,这仨呢,是我们说非常重要的,对吧,除了这仨之外呢,大家你会看到是不是有大量的叫什么什么杠,呃,Privilege是吧,就是具备什么什么样的这些权限,你看这的都很多,每一个这个权限的话呢,都是一个innu类型,那我们就是上篇讲到的一个数据类型的叫枚举类型啊,要么是Y,要么是N,就是你是否有有或者没有啊,默认情况下呢,都是no,相当于默认呢,都是没有这样的权限的。这是它的一个默认值,就相当于比如我们创建了个张三用户默认的是不是这些权限全都没有啊,嗯,没问题,然后呢,我们提到了是不是这个host和user他俩合在一起构成一个联合储建,看这也能看得到,对吧。这是我们说的第二步,就关于这个权限的问题。那关于权限问题,注意啊,呃,你比如说我们张三用户呢,如果有这个权限这块,如果写的是一个Y啊,我们设置成是一个Y了,这个Y意味着什么呢?就是我们这个张三用户呢,针对于所有的数据库。
29:08
你看这里边我们没有体现说哪个数据库了,对吧,针对于所有的数据库呢,都是一个Y,相当于是都可以进行一个查询啊,就是这个意思,咱这表里边没有一个字段叫DB的,嗯,好,这是我们说的第二波,然后第三波这块呢,涉及到一些安全校验的,那涉及到比如这个SSL啊,只要看到SSL这块都是关于这个安全校验这个相关的,对吧,那用于这个加密的,然后这两个呢,是用于这个呃,标识用户的。啊,包括像那种插件等等啊,这是验证用户这个身份的,这呢是咱们说这个第三波还有几个呢,是像这个啊max这个max。啊,这是什么意思啊?它呢是用来啊标识这个用户啊,每小时允许执行这个查询的一个次数,你要每小时超过这个次数的,他就不让你查了,这就是每小时呢,就是这个update的一个次数的一个限制啊,允许你执行的一个修改的限制,那connection的话呢,就是你每小时呢,相当于允许的一个连接次数的一个限制啊,这个呢是每一个用户呢,相当于你,呃,相当于用户呢,允许你同时建立的连接的次数。
30:12
啊,这有几个这个max啊,这几个参数。行啊,这块呢,咱就相当于是对咱们这个叫user这个表呢,先进行一个熟悉,主要呢,大家关注的就是我们host和user啊,再加上咱们这个叫密码的这个参数。啊,就可以了是吧,好,那user下边的话呢,我们涉及到一个表叫做DB表,那咱们可以de一下DB啊,你看这呢,是不是也是一张表啊。啊,那这张表它体现的呢,就是针对于某一个具体的数据库的这个操作的权限的问题。啊,怎么讲呢,当然你会发现呢,我们在这个表当中是不是有一个host,然后有一个user,你看还有一个DB,这三者呢,连在一起构成了一个联合主键。啊,他想体现的是什么呢?就是比如说我们张三用户是这个,呃,百分号过来的这样的一个IP地址下的一个张三用户,针对于具体的这个数据库,注意咱们现在看到这段啊,你要横向来看它是不是就具体某一张表某一个数据库了,对吧,比如说针对于这个咱们说叫DB test1吧。
31:13
哎,针对这个数据库,诶,然后呢,你是不是具备下边的这样的一些这个权限。诶,所以说呢,我们这个表,那这个数据,呃,这个表吧,DB这个表,这个表的话呢,是非常重要的一个表,它呢,呃,体现了就是我们某一个用户啊,它是否有针对于某一个数据库的相关操作的这个权限。啊,相关操作的权限,这呢,就是关于这个DB啊,他就过了,然后他完了以后呢,我们还有这个D,是不是有个叫table。啊,Priv是吧,哎,这样的一个表。啊,Table tables吧。加个S是吧,诶这个表,这个表的话呢,就是关于啊,你猜是不是能猜得到啊,就是关于具体的某一个表的啊,它的这个权限啊,你看这时候呢,不知道大家你能不能有这样一个意识能够想到啊,你看这时候我们这个主签,你看他就更多了啊,针对于某一个用户啊,是针对某个IP地址过来的这个用户,诶这个数据库下载这张表,诶他们四个连在一起,构成了一个联合组件。
32:15
那是唯一的对吧?呃,就相当于是我们某一个用户,比如张三用户啊,你针对这个DB test这个数据库的这个EPE这个表呢,是不是具备相关的一些权限啊,就下边一些这个表述了,你看这里边呢,涉及到这些权限的话呢,我们用一个集合来表示了,里边你从这里边去挑选一个或多个这个枚举类跟这个集合的区别呢,就是我们这可以多选多的是吧,那你上面只能是多选一那这样一个区别。好,这呢,就是我们说的这个叫the table啊,那除了这个之外呢,我们说还在往下分,还可以再分成是不是关于这个叫呃column,哎,注意这时候还有一个S啊PV啊这个表。这个表里边的话呢,就是针对的是不是具体的这个叫字段,我们说叫列了。
33:00
啊,所以说这里边儿大家你也能够想象到,那就是从这个IP过来的这个用户,针对这个数据库下的这个表中这个字段,诶是否具备相关的这个权限。所以呢,就是他们五个构在构成在一起啊,体现了是一个联合组建这样一个行为。啊,越往下边你看我现在越往下边讲,是不是这个力度呢,它就越小啊,啊没有问题的啊,那最后的话呢,咱们还有一个呢,就是这个呃,Pro proc是吧,就是我们关于存储过程它相关的一个权限啊这呢我们就不拒绝去看它了。你看你看刚才我解释的这些呢,在这里边儿啊,其实都有这个体现啊,关于存储过程的啊,说说明行,那么这几张表呢,咱们就相当于是进行了一个了解,然后的话呢,其实跟我们这个第四个点啊,就联合在一起了。叫访问的一个控制,说正常情况下呢,我们并不希望每个用户呢,都可以执行所有的数据库操作,这不就通过权限来控制的嘛,对吧?那首先的话呢,我们先这个用户在登录的时候呢,先去核实他这个请求呢,是不是这个连接请求呢,是不是合理的啊,密码写的对不对,你这个host呢准不准确,然后确定用户的请求之后的话呢,我们再去这个这个进行这个访问是吧?访问的话呢,就看你具体想访问哪个表权限呢,具不具备啊这呢其实是一个请求的一个核实阶段。
34:19
那这就对应我们说两个阶段啊,第一个阶段就是我刚才说的会在我们这个user表里边去做校验,Host user和我们这个authentication string,这三个呢,是不是都能匹配,能匹配就意味着我们用户呢,登录是成功的。啊,登录是成功的,呃,你要是登录失败的话呢,这个这个或者这个密码写写错了,或者我们这个host不准确啊,这时候呢,我们就能够拒绝啊,你访问这个服务器了。啊,这是我们说的这个事儿,那一旦呢,你要是这个服务这个这个写对了,那我们就进入第二个阶段,进入第二阶段的话呢,我们这里边儿就有一个具体的一个详情了,举个例子,你比如说我们在这块啊,咱们先做一个,呃,推出啊MYSQL-U啊,我叫张三,然后杠P啊ABC123,我一回车,那这块你看我登录成功了,相当于刚才这个过程呢,就是我们叫连接的一个。
35:11
啊,在这是吧,叫连接的一个核实阶段啊,核实一下我们用户名密码都对啊啊后呢,也没问题就进来了,那么接下来的话呢。接下来我在这块,比如我想去use一下,叫DB test1。哎,这个啊,先先去收一下吧。说一下我们这个叫basis。诶这时候呢,你看能够查询出来我们这样的两个数据库啊,其实这时候呢,已经进入我们这个要请求的一个核实阶段了啊下边这块呢,其实都是像我们use一下DB test1,然后我们去做一个select from一下DB test1啊你看这时候不让我们去查,相当于我们再去进行这样的一个执行的时候呢,请求的时候呢,他发现呢,我们不具备这个查询这个权限,就给我们拒绝了,那么在咱们这块呢,这两个操作的过程当中,诶,他又是什么样的一个过程呢?诶是这样子的。
36:04
首先的话呢,就比如我们张三他呢,想去操作这个DB test1啊,或者操作它之前,咱们先是不是叫受对basis是吧?诶我们在这个优色这个表中,它的力度呢,是最粗的啊啊最宽的,它里边呢,就是针对于所有的数据库,我们看看张三呢是不是具备这样的权限,如果都具备了,那就不用往下走了。咱们就直接能够查出来了,如果呢,不具备不具备呢,接着往下看,诶接着往下看,看看这块儿呢,我们针对于具体的某一个数据库,就是在我们这个DB权限表里边儿去规范的,它涉及到的是不是具体的那个数据库了。啊,比如说针对DB t1是吧,诶我们针对DDB t1呢,诶是不是具备它所有的权限。啊,是不是具备所有权限,如果具备呢,直接就来操作,如果不具备呢,接着再往下找,然后呢,我们看一下table啊。针对于我们具体的某一张表啊,力度呢又进一步了,那你像DB test1下边不是所有的表都能查,我们只是针对于是叫EP这个表了,诶看看这个表里边的这个权限呢,是不是都有啊,如果呃具备这个查询的权限,OK,那你就诶回去去做就行,诶如果呢,这块呢,诶你想查的是具体某一个字段的,然后呢,你现在想查就是这个字段的权限,如果有这个字段权,如果没有,你现在恰好就查这个字段的,诶这块的表这块呢,相当于没有完整的给你,你再接着呢,去深入到你这个列的级别上看看是诶这个。
37:26
你要查查这个呢,就就可以是吧,你要是这个的话呢,就不允许。诶能听懂这个意思吧,就是我们这块呢,没有去给大家去具体深入到具体的字段这块呢,去提供这样的一个权限了,咱们也就到这个表级别了啊,所以大家可能理解这块呢,稍微呃有点不太清晰,但是呢,这个意思呢,应该能明白,相当于我们这个权限呢,在校验的时候呢,就是请求再过来的时候呢,层层往里。啊,先看最外层的一个权限,是不是所有的表你都能,所有的库都能查,诶是是你就直接啊行,那就查吧,哎,不是不是,那行,先看你要查的是不是,具体这个数据库让不让查啊等等等等等,就这样一个过程。
38:02
这呢就是咱们整个的一个叫请求的核实阶段,三跟四呢,相当于是对我们一跟二底层原理的一个解释,包括呢,它存储结构啊,就说你这个权限都记录在哪了呢?诶我们这有几个表的支撑啊,都记录在这里边的,以及呢,它的一个执行过程啊,这块呢,都没有具体的代码呢,但是大家的话呢,诶听清楚以后啊,对于我们去理解一跟二呢是有帮助的。好,那这块我们关于这个三四就说到这儿。
我来说两句