00:00
好,同学们,咱们接着来看下一个概念啊,叫做角色管理,这个角色呢,是在8.0呢,我们新引入的一个概念啊,这个其实在MYSQL当中算是比较新的一个特性了,但是呢,相较于这个Oracle来讲啊,Oracle呢在十这个版本当中啊,其实就已经有这个角色了啊,你可以看到呢,这个是从Oracle当中借鉴过来的这样的一个概念。啊,角色是什么呢?那就是大家呢,你可能看电影电视剧的时候呢,经常我们会看到这个是一个什么样么角色,那个是一个什么样的角色是吧?呃,一旦呢,你定位好他的角色以后的话呢,那其实这个人呢,他就赋予了相关的一些这个呃特征是吧?诶这就我们所说的这个角色的一个概念,在我们这个MYQ当中啊,这个角色他就是叫权限的集合。啊,可以呢,给角色添加或者是移除对应的权限,那么对于用户来讲呢,用户呢,只要啊,只要我们把这个角角色呢,赋予给了某个用户,那这个用户呢,就相对应的啊,就具有了这个角色当中包含的这个权限啊,比如我们下边这样的一个图,原来呢,我们在没有角色的时候呢,呃,只有用户和权限这样的概念,那来了一个用户,或者我们创建了一个用户这块我们看哪些权限呢,是适合给他的,我们就给到他了,那这时候这个权限的话呢,大家你知道实际上是非常的细的是吧。
01:15
咱们不是有一个这个参数呢,叫show吗。这样对吧,这块我们能看到一共看有62个这个权限,那这个权限的话呢,我们在负一的时候呢,就相当于是你得看清楚了,到底给这个用户呢,应该给什么样的权限啊,一个一个来是吧?呃,那么我们在实际操作当中可能会发现哈,有的用户呢,他具备这个权限啊,是比较接近的,甚至说呢是相同的,那比如说我们这四个权限呢,咱们都需要给了这个ABC这三个用户。那你要是像原来的方式呢,就把这几个权限分别呢,去grant过去对吧,那现在的话呢,我们就可以呢,简单一点,我们把这四个权限呢,封装到一个角色里边啊,或者说呢,我们先创建一个角色,然后呢,呃,把这四个权限呢,是不是给到我们这个角色呀,那这时候这个角色呢,注意它不是一个用户,那我们不可能说呃使用这个角色去登录啊,这是不对的,有点类似于呢,就像Java当中啊,这就像是一个接口一样。
02:11
啊,就是你不能说直接造接口的对象了,我们需要呢,是不是由类呢,具体去实现这个接口,创建类的对象对吧?那这里边儿呢,就好比是呢,我们去创建一个一个的呃这个用户,让这个呃角色呢,我们把它赋予对应的这个用户啊相当于呢,就是我们这个类呢去实现了这个接口,然后的话呢,我们这个用户啊,相当于呢,就具备了这个角色当中,他当初具备的这样的一些权限。啊,这个也很好理解,你像在这个公司当中啊,比如公司规模比较小的时候呢,啊,张三李四王五是吧,来说呢,你干这个,你干这个,你干这个啊甚至说呢,甚至说呢,这个比如说这仨人都是这个销售啊销售的话呢,他们具备的权限呢,其实就一样了,那这个时候呢,我们不妨是不是就创建具体的一个角色,就叫做销售,然后把他他具备这个权限呢,我们就放到这个销售这个角色里边,然后把这个角色销售的角色呢,付给这三个,呃,张三李四王五,那他们呢,其实就权限立马就有了。
03:06
啊,那你像公司要是规模大的时候呢,是不是更应该这样去做呀,那你像比如华为这样的公司,他有这个十几万几十万的这个员工,那我们就定义相关的这种角色啊,这呢是销售部经理,这个呢是HR啊,这个经理啊,这个呢是我们这个研发部的经理啊,这呢其实都是一些角色了,然后这个角色呢,我们可能付给这个叫北京区的这样的一个具体的人啊,付给这个华东区的,付给这个东北区的,付给具体的人之后呢,呃,这个人呢,直接具备角色当中赋予的这样的一些权限啊就。这个比较方便一些啊,这个意思呢,应该大家很清楚,好,下边的话呢,我们就开始讲解一下这个具体的使用,这个第五节呢,叫角色管理,咱们整体上来讲呢,你看这我列了还挺多,分成两个,这个上下篇来讲,第一个篇的话呢,咱们整体来看,我首先呢,是不是要创建一个角色呀。那这个角色里边呢,是没有任何权限的,所以下步呢,我们就要给这个角色呢去赋予权限,那很正常的,对吧?赋予完以后的话,我们查看一下,看这个角色是不是有这个权限了,OK,没问题,有这个权限,然后呢,我们看看这个能添加是不是还可以删除啊,啊不是,是不是还可以回收啊,那我们这里边就把这个权限呢,再给他回收掉,这就涉及到5.5,然后最后我们还可以呢,把这个角色呢给他做一个删除,这呢就算咱们这个上篇啊,关于角色里边的这个内容,然后下边这块呢,那我们就开始跟用用户跟这个角色呢去发生这个关系了,咱把这个角色呢,是不是付给相应的这个用户啊。
04:32
哎,给用户赋予权角色,相当于是把角色给了这个用户,OK,然后呢,给了用户以后呢,发现呢,默认情况下呢,还不能用,就是用户呢,并不是说有了这个角色以后呢,我们就具备里边的权限,还得需要呢去激活这个角色啊,这呢需要大家注意一下,行,那激活角色以后呢,我们这用户呢,就具备了角色当中的这个权限了,咱就能操作了,也可以做一个演示,那下边的话呢,我们就可以撤销用户的角色啊,把这个角色回收以后呢,他就没有这样的这个权限了,对吧?行,这是我们做的5.9,那最后呢,我们再补了一个5.10啊,这个叫设置强制角色,就相当于呢,我们给咱们当前数据库系统当中的所有的用户呢,可以设置一些默认的一些角色。
05:12
啊,就是每个用户只要你创建的话呢,它都具备这样的角色啊这个5.10这个事儿行这呢就分成这个两篇来讲解,OK,行,那我们这块呢,就首先来看这个算上篇啊如何去创建角色啊,让角色跟权限发生关系,下篇的话呢,是角色跟用户发生关系。那如何创建角色呢?呃,咱们也说了,在circleq当中啊,所有的创建这个结构的操作呢,都是非常直接的,所以你都能够猜出来了,那就是create肉呢,就是角色的意思啊,然后后边呢,也可以指定具体的host啊,非常的简单啊,非常的简单,好这呢,我们就直接呢在这里边儿呢进行一个操作了啊注意嗯,这里边呢,我操作呢,都是咱们包括前几章都是用的这个命令行,我没有写在咱们这个测库要当中,呃,因为在实际开发场景当中,我们很多时候呢,都是通过命令行呢,是不是对远程的进行这个操作了,那我就也写到这儿了。
06:04
嗯,但是呢,这块呢,可能大家下来练的话呢,说诶老师我想看你的代码,那其实这块呢,咱们现在操作都比较简单了啊,不像咱们讲上篇的时候呢,这个大家都是零基础的啊,所以我都把这个代码呢给保存下来了,诶然后有时候讲的可能还稍微的磨迹一点是吧,然后下边的时候呢,呃,咱们这里边儿这个操作呢,大家相应的你想看的话呢,在课件里边都有啊,我就直接写到命令行里了,好,首先呢,我们这块去演示如何去创建角色啊create。诶create,注意咱们现在呢,是在这个root用户下登录的,那所以呢,Root用户呢,这个权限比较大啊,它具备这个创建角色的这样的一个,嗯,权限create road啊我们来一个比如说叫manager吧,这样写的话呢,相当于我们后边呢,就带了一个这样的一个操作,对吧。好,我们这块呢,显示的把它写出来行,那此时的话呢,我们就相当于创建了一个肉啊一个角色,那咱们再来一个吧。Create一个肉,那我们比如说创建一个boss。
07:00
Boss是吧,应该叫boss啊,这个公司的老板啊,创建了两个角色,行,这个非常简单啊,这就完事了,那角色创建完以后呢,接下来我们主要的是不是要给他赋予相关的权限呀。那赋予相关的权限,这个权限的赋予的话呢,这样来操作叫grant privilege,就是具体的这个权限了,然后on是哪个表的啊,就是针对于这个表的什么样的权限,然后给了哪个角色啊,非常简单对吧,那具体举例的话呢,这边也有,那咱们这块呢,就直接来写了,那首先的话呢,你得熟悉咱们当前这个数据库中的这个表的一个情况,嗯,咱不是有这个。嗯,我先这样看一下啊,Use一下叫DB test。一这样的数据库,然后我们去收一下这个tables是吧。这里边儿呢,我们有三个这个表,那咱们还以这个表呢来开刀,那此时呢,我们就可以这样去操作了,我们去grant一下,比如说呢是这个select。啊,这是一个查询,我们再来一个update吧,嗯,然后呢是on啊on咱们叫DB啊TEST1这个数据库下啊,咱们比如说给他所有的表吧,有点星了一下。
08:08
嗯,所有的表,然后呢,我们在to给了这个叫manager啊,然后后边呢,我要没有写这个,诶百分号,呃,这个艾特百分号其实默认的也是它,所以我这块我就这样子啊,可以这样去写一下,OK,那我们就执行成功了,这呢就是具体的赋予相关的这个,呃,操作这个权限吧,诶我们针对是哪个库下的哪个表这样的行为,你也可以写成性点行是吧,那比如我们这时候再去一下啊,我们把所有的all privilege。那然后啊,那我们来一个星点星,那to,比如说boss啊,这个boss的那个权限就比较大了啊,我们这个呢,比如说给他加上一个这样的一个声明。好,那这时候呢,就是我们说的第二个操作,咱们给这个角色呢,是不是赋予了对应的一些权限,OK,好,这个呢也比较简单。下边呢,有这个具体的举例子啊,举例子大家你也可以看看,比如说我们创建了三个角色,这个角色呢,你要一下子创建多个的话呢,也可以呢,在一行代码中去指定,中间用逗号连接就行,然后呢,分别给对应的这个角色,我们赋予不同的权限,比如说给这个schoolin啊,这属于一个管理员的角色了,给他呢是all privilege,这个数据库下的所有的表都可以,然后这个呢是只有读的权限,我们只有一个select,这呢是写的权限,那就是增删改的啊权限啊,On谁to谁啊,刚才我们不是也是这样写的吗?
09:26
好,这个是我们说的第二个操作,第三个操作呢,就是查看角色的这个权限,说我们现在呢,给这个角色加权限了,你看一看是不是有这样的权限,这个这个权限了呢,那我们可以在那去做一个查看啊,这个操作呢,也跟前面查看用户里边的这个呃,权限是一样的啊收S。说呢,注意我们要这样写的话呢,咱查看的是不是root用户的这个权限了呀,咱们现在是要查看具体的某一个角色的是吧,所以叫show grants呢,我们叫做for,哎,Manager,那后边呢,你也可以给它补全,那就这样写啊,单引号的啊。
10:01
哎,回车一下。哎,Manager,你看我是不是写错了啊,放写错了啊。诶回撤一下行,那这块我们就看到,诶注意诶,我们包括前面那个创建一个用户也一样,是不是都有这样的一个权限啊,就是这个表示登录的一个权限啊,登录的一个权限,然后这个呢,就是我们刚才说grant了一下select和update,针对这个数据库下所有表的这样的一个权限,给了我们这样的一个角色了,没有问题的,然后我们再去收一下S。这个for。那咱们还有一个呢,叫boss是吧,哎,我就这样查看了,那这里边这个权限呢,就非常多啊,你也能看到呢,就是咱们不是这个all privilege吗。没问题是吧。行,那这块的话呢,我们就相当于是能够去查看这个角色的权限了啊,这一步呢,也就过掉了啊,也就过掉了,然后再往下的话呢,我们可以去回收角色的这个权限啊,这个权限的话,我们想给他收回掉啊,你可以用这个叫revoke,跟咱们前面回收这个用户的这个权限呢,其实是类似的revoke具体的权限针对于哪个库下的哪个表,然后from就用的是from叫回收,诶给的话呢,叫to是吧,诶这样子。
11:09
好,那这块我们来具体操作一下,比如说呢,我们针对这个manager这个角色的话呢,咱们把这个update呢,权限给它回收掉啊,我们开始怎么去操作这个我们叫revoke。Update啊,然后是不是还是on啊,咱DB test一点星是吧,然后一下。这样写,那然后我们再去收。这个grounds,然后放一下。Manager。哎,这样子是吧,好,那这时候呢,我们就看到了针对manager这个角色呗,哎,咱们此时呢,就没有update这样的权限了。啊,这呢就是一个回收啊,没问题,然后再下面呢,叫删除角色啊,不想要了啊删除角色其实也很简单的,就是照入一下入一下就可以了啊这两个我们想都留着,那咱们就再去新建一个,然后它建的目的呢,就是为了删掉它是吧?诶create一个肉啊,我们再来一个,比如说叫admin吧。
12:11
好,那这呢,我也不给他去添加权限了,咱就直接呢把它干掉啊,我们就照一下,嗯,照回着我们当前这个肉啊啊的mean,诶是不是这样就可以了,上完以后的话呢,你可以通过我们叫show,哎S,然后for。哎,咱们叫ain,你查看一下说呢,There is no such这个这个定义,哎,In相当于我们就没有这个mean这个用户啊,咱们不是刚才给干掉了吗?好,那这样的话呢,我们就把这个上篇呢,算是就告一段落啊,关于角色跟权限他们之间发生关系的这样的一个场景。啊,应该很清楚是吧,好,那么接下来的话呢,我们再看这个叫下篇。下边的话呢,就是让这个用户呢,跟这个角色呢去发生关系,那我们刚才呢,创建了具体的比如叫manager这样的一个角色,然后把它呢给到我们具体的某一个用户,对吧?行,那我们首先呢去收,呃先先这样吧,呃,Use一下叫MY。
13:04
然后呢,我去这个select。哎,Select啊,我们host的user,哎,From一下,哎,咱们的这个user表好,嗯,目前的话呢,我们有这样的张三李四啊,张三李四你看这是我们这个boss和manager是不是这块呢,也是在我们user表中出现了,实际上呢,他不是用户,他是角色,对吧,那张三李四都有了,咱们这块呢,再换一个干净的一个素人是吧?哎,咱们叫王五吧,哎,我们先去create。啊,一个user叫哎王五。啊,这个咱们也指定啊,就显示的给大家写出来吧,Identified。哎,By ABC啊123好,这呢,我们就把这个用户呢,是不是给创建好了,哎,这块我们再重新的再登录一下。我呢使用啊王五这个用户呢,咱们先给他登录上。
14:00
哎,王五杠P啊,我密码我就写到这了,登录成功了没问题,好,那此时的话呢,我们如果去叫show data basis。诶,你看是不是只能看到一个啊,这个是相当于你这时候啥也没有是吧,如果你要这个收grounds的话呢,诶那这块呢,相于就只有一个登录的一个权限啊,OK的行,那回过来下边的话呢,我们看如何给这个王五呢,去赋予这个角色啊,这个比较简单,就是这个角色给了我们这个用户就行,好那这块我们就葛特是吧,没有这个S啊嗯,我们叫manager啊,准确的来说呢,应该是是不是它呀。哎,所以你看这个manager呢,它也出现在我们这个优色表里了,所以你看这个也是必须的啊啊,因为呢,这两个合在一起构成我们说的一个主键嘛。Gra呢,我们当年这个角色,然后兔给了谁呢?给了我们的王五是吧?然后呢,这个我们也给他补全一下,那这时候我们是不是就给了王五了,给了王五以后呢,我们看一下是不是真给了咱们现在在入的用户下呢,咱可以呢这样去写啊,是grounds,然后这样回车的话呢,我们现在查看的是不是入的用户啊,然后我们现在想查看的呃,For是不是叫哎王五啊。
15:09
哎,我就把这个后边的这个省略掉了啊,一回车行此时大家你会发现王五这个用户的话呢,是不是具备这样的一个角色了呀。那具备这个角色了,那我们在王五这块呢,自己这儿查看一下看看,哎,我们去收。哎,直接我们这样啊show一下好,那刚才呢呢只有一个,现在是不是就俩了,哎,这个manager呢,相当于我们就把它这个角色过来了,那manager的话呢,咱们是具备一个。诶,是不是说查询这个数据库下这些所有表的一个权限呀,好,那么这时候呢,咱们去授一下,看看这时候能不能看到这个数据库了,叫data。A。诶好,大家你看啊,我们明明呢具备了这样的一个角色,哎,但是呢,我们现在在查看的时候,你发现没有是吧。是不是没有我们这个DB,呃,TEST1这样一个数据库啊,那同学可能会说说老师你是不是得需要这块,比如说flash一下,哎,注意这时候其实不用啊,像我们这个DDL这种操作呢,都不用去flash啊,哎,这是一个点,然后第二点老有同学说是老师你是不是得需要退出一下,好,那我们退出一下,你看看咱们再重新的进入啊杠。
16:15
哎,王五,然后杠PABC123,我呢又重新登录了,那此时的话呢,我们再去收一下data塔basis。这时候你要再没有就说不过去了是吧?来走一下,你发现,哎哟,还真没有。相当于呢,我们这时候呢,咱的我再把这个跑一下啊,咱这个用户呢,已经具备这样的一个角色了,但是呢,他却没有角色里边对应的这个权限。啊,那这是什么原因造成的呢?哎,这呢,就咱们下边说的这个事儿,默认情况下呢,咱们这个只是赋予了这个角色,但是呢,诶MYSQ中创建的角色默认都是没有被激活的,我们必须要激活这个角色呢,才可以让用户呢去使用啊,激活呢,还得手动去激活啊这呢提供了两种方式啊,第一种方式呢,就是手动写的set default肉,然后呃,肉哦是吧,你也可以学default,你这是一个什么样的一个肉。
17:05
具体什么样的一个这个角色是吧?哦,然后给了谁啊这块你要有多个用户呢,你就是逗号逗号逗号写多个这个用户就可以了,那我们这里边呢,就可以这样来,诶诶做这个操作之前,咱们再看一个事儿哈,哎,就是这个事儿。看在这个事儿啊,这个要不一会儿咱们一个激活以后呢,你大家就看不出来了哈,这个叫select current row。啊来我们这块呢,在咱们这个王五这块呢,咱们执行一下。啊,Select current,你看这时候呢,显示的是不是个now是吧,这个其实表示的就是我们没有激活这样的一个角色。啊,没有激活的一个意思啊,虽然这块能显示有了给给角色了,但是没有激活好,下边我们去激活啊,刚才我们看到这样的一个操作是什么呀,叫set default。哎,At,我们此时呢,是不是啊。啊,别写错了,然后呢,是这个操作吧,然后呢,是不是叫哦,哎兔给了我们的王五,哎这么着一下,哎是不是就可以了。
18:05
好诶,这个写错了是吧?哎,这个我们看一下说在我们这个many这个附近呢,出错了啊,这个是这样啊,Set default啊default这个肉啊,然后呢,后边呢,我们写这个具体的,呃,这个角色名啊manager。哎,这样子去处理啊,然后呢,处啊给了我们这个王五。诶,然后我们把它呢也写全,诶这样的一个情况是吧?啊回车一下,好,那这样的话呢,我们就把这个,呃,王五的这个manager这样的一个角色呢,咱就给他做了一个激活,那激活以后的话呢,大家你再去执行这个操作啊,我们去做一个复制啊回过来我们再说再粘过来,诶走起。还这个能是吧。嗯,还是一个now啊,那这时候呢,注意我们需要呢,给它做一个退出,哎,我们做一个快是吧,所以说以后的话呢,我们再去登录啊,MYSQL-U啊往五杠PABC-123行进来了,进来以后呢,我们这时候再去执行咱们刚才这个current,哎这个肉啊大家看此时的话呢,我们这个呢,就不再是这个none了。
19:07
啊,就不是零那了,那要不是那样的话呢,这时候我们就有戏了,咱去受一下是不是叫data塔basis是吧?诶一查看说我们这个DB test1就有了,哎,那这时候呢,下边这个层呢,就是哎这个。顺理成章的了啊,你就可以去做了,诶然后我们去select,咱们不是说这里边有这个查询的权限吗?呃,Select行诶from一下,诶我们有个表呢,是叫em这个表那就能查询,那他是不是只有这个查询的权限啊,比如我们去做一个delete,诶from一下咱们的E啊说where。那这个ID呢,等于二啊,把ID2的这条数据呢给删掉,发现这时呢,不让我们去删啊,因为呢,咱们这个manager在定义的时候呢,是不是只有这样的一个查询的一个权限吧。哎,这呢,就我们说的这两个问题,行就说清楚了啊,这块激活的时候呢,大家注意一下啊,那除了这种方式之外的话呢,还有一种方式呢,就是直接呢,我们在这个呃,设置参数的时候,这个参数的话呢,是我们属于一个系统变量了,这个系统变量的话呢,如果我们去做一个受查看默认呢,它是一个off的。
20:08
啊,我就不演示了啊,说明一下就可以了,哎,默认的是个off,那就意味着咱们默认情况下呢,咱们的这个肉呢,它都是一个,诶是不是没有激活的状态啊,那咱们呢,可以啊,通过一个呃,临时性的一种方式啊set global。相当于呢,它还是一个全局的一个场景,对吧,既是全局的又是session的,我们直接就设置成全局了,哎,全局的这样的一个参数呢,设置成是个啊,那这样的话呢,我们在创建角色的时候呢,付给相应的用户,这个角色默认就是激活的状态了。啊,这个注意一下啊,当然你也可以呢,设置到这个配置文件当中也OK是吧。好,这个呢,大家注意一下这个情况,呃,然后下边这个呢,叫撤销用户的一个角色啊,你把这个角色呢,从用户当呃从这个用户当中把它撤销掉了,那我们在这个用户呢,权限就也没有了,再回过来去演示啊,嗯,这块撤销的话呢,咱就别拿这个王五自己去演示撤销了,你自己撤销你自己呢,这个事儿不太靠谱了是吧,你比如说我们去revoke。
21:08
Re,和谁呀?我们叫manager。然后这样子是吧,诶这个用的是叫from啊,From的叫王五。诶这样是吧,注意你看这时候我是在王五的这个他自己这个用户下边啊,我们去执行的这个操作,诶这块呢,你看他是权限是被dey的了,就是你自己呢,没有去回收权限这样的一个功能啊,这个王五的权限还是比较有限的,那我们再回到这个root用户这块呢,咱们把它粘过来,诶一回车你看这时候是可以成功的。那这个成功以后的话呢,我们再回过来,咱们王五注意此时呢,是不是还是登录的状态啊,王五现在登着呢啊登着呢,咱们这块呢,再让王五去做一个查询吧。你看往往是不是还是可以查的呀,所以怎么把这个权限已经把用户,呃把这个角色已经回收了,怎么他还能够去呃执行这个角色里边的这个权限呢?哎,这个主要原因是因为咱们现在没有退出。
22:03
啊,大家需要退出一下再登录。这个万物。是吧,在登录以后的话呢,呃,你再试图呢,去查看一下,比如我们的这个data。那你看这时候是不是就没有这个数据库了,那你再去查这个表,这肯定是不行的是吧,你想你去UC下DB才得根本就看不见嘛。哎,这就不靠谱儿了。啊,所以说呢,呃,当我们回收这个角色以后啊,你得这个用户呢,得重新在登录它才能够去起作用啊,如果当前用户在这里边儿呢,它是还可以进行操作的啊这个小细节呢,大家去关注一下。好,那这呢,就是我们说撤销用户的这个角色的这个事儿,然后最后这个呢,叫设置强制的角色啊,你看这个单词呢,就是强制的意思了,就是我们可以给每一个创建的这个用户啊,给他提供一个默认的角色啊,不需要咱们手动的再去设置了,强制的角色呢,也无法呢被revoke或者是drop。那我们可以呢,在这个配置文件当中去指明。
23:01
啊,一旦指明以后的话呢,呃,当然在运行的时候呢,也可以临时的这个方式去指明,指明以后的话呢,那我们这个用户呢,相当于他都具备这样的这个角色了啊这个呢,一般咱们个人的话,或者开发当中,咱们通常呢,很少去设置这种强制角色啊,但是系统层面的话呢,我们可以呢,诶对用户创建的每一个角色啊,当然你比如说刚才呢,咱们在所有在创建用户的时候,只要咱们创建完用户呢,大家你会发现它是不是都具备这样的登录的这样的一个权限呀,诶你可以呢,把它看作是呢,我们把这个登录的权限呢,放在角色里边了,然后所有创建的用户呢,默认都有这种登录的这样的一个。角色里的权限啊,那我们就可以把这个事儿呢,放到一个强制角色里面去做啊,了解一下就可以行,那整个这一节呢,咱们都是针对于三个概念,角色这个权限和用户呢展开的啊,大家呢,知道把它给了他,然后把这个角色呢再给了用户是吧,这样的一个关系就OK了,下来呢,自己稍微的大家练一练啊,OK,行,那这一节呢,我们就说到这儿。
我来说两句