控制用户权限

其实这一节的内容对于大家来讲并不会太陌生,我们这一节主要是要讲什么,你看一下本章的学习目标,通过

这一章的学习,我们要学会如何来创建用户,如何创建角色,以及使用grant和revoke语句赋予以及回收赋予用户的

权限,然后呢创建数据库的连接,这些操作实际上大家看到不太陌生,因为刚才我们也看到了,在数据库讲完以后,

有一个叫数据库管理

已经给大家讲了,数据库管理这一块,就是通过企业管理器来实现的,我们以管理员身份来运行他

这是这个操作界面,然后我们要登陆的是orcl数据库,用户名口令,这个我们可以使用系统用户system,或者我们

就直接以DBA的形式来登陆

登陆好以后,当时讲过了,在安全性这一块,有用户,角色,和概要文件,这样我们讲这节内容之前,先简单的

花几分钟的时间,给大家讲一讲当时我们是怎么来操作的,这是我们整个数据库在我们安装完以后,默认给我们

提供这样一些用户,system这是一个系统用户

我们之前关于SQL语言的学习,都使用的叫SCOTT用户,我在这个SCOTT用户下面,创建了好多张表,

对这个表进行增删改查,创建表等等的操作,那么如果我们要新建一个用户的话,或者公司当中有又来了

一个跟数据库相关的人,给他创建一个用户赋给他,我们只要在用户这一块给他创建,第一下没有再来一下

这是一个bug,我创建,创建你要提供用户的名称,以及口令,这里面的名称我们就叫做ATHOME,

他默认都是大写的,这个你不用管,大写小写都是可以的,都是忽略的,口令,我这里还是使用ATHOME,

然后这里有一个叫概要文件,概要文件当时我们也说了,我们选用默认的,密码输出错误以后,多少次

锁定,以及锁定的时间,和CPU访问交互的信息,都是通过概要文件来进行描述的,下面还有表空间,默认

就是使用users,这个表空间相当于给我们分配你这个用户创建的一些表,数据库对象,那么真正存储在硬盘里边,

给他分配多大的空间,这是表空间来定义的,可以锁定

这里呢我们这个用户就创建好了

创建好以后啊,我就可以使用PL/SQL来登陆了,我们双击登陆,如果你登陆不进来的,大家以管理员身份来运行,

我们这里就可以使用atguigu,登陆我们这个orcl数据库

大家看到我现在已经登陆进来了

我登陆进来以后,按说我这个时候我想创建一张表的时候,大家应该知道,他不一定有这个权限,

是吧,有没有啊,可以来这个企业管理器这里来查看,怎么查看,我双击atguigu用户,我们当时讲的时候,

分别将系统权限,角色,对象,限额,都给大家有意的说明,都给大家讲解了,系统这一块,就定义了我们大概

的系统权限,100多项系统权限,那么这些权限相应的有哪些需要用户所具有,我们就赋给他,然后角色呢,就是

我们把相应的一些权限,系统权限,赋给角色,角色赋给某一个用户

我当时说过了,你看我们这个atguigu用户,我创建好以后,他默认给我一个connect的角色,那这个角色

都有哪些系统权限或者对象呢,那你只能在这看

我们找到叫connect,然后你看看他的这个信息,他再也没有其他的封装角色了,系统,对象这里也没有

相当于这个角色就封装了一个系统权限,叫create session,那么这个权限是做什么用的呢,实际上是这个功能,

当你给一个数据库对象赋予一个create session这个权限以后,我就可以通过赋予权限的这个用户,来登陆相应的数据库了,

相当于是一个登陆的权限,意味着当你不赋予create session权限的时候,就登陆不了数据库的,就是这个意思,那么如果我们想

创建一个表的话,那就是create table,id number类型的10个长度

create table emp(id number(10))

说权限不足,并没有把创建表的权限赋给atguigu用户,所以我们得回来,回来我们找到create table,

或者create any table,找到以后

这个角色是oracle默认提供的角色叫connect,要不你就新建一个角色,你最好 不要对默认的角色进行修改,

所以我们在这里添加一个子系统的权限,给他加上来

我们再回来,这个时候我再来创建,就不会有问题了

create table emp(
	id number(10)
)

但是大家现在也都看到了,又提供了一个异常,对表空间users无权限,对他没有权限,我们当时说了,

什么意思,就是回来再atguigu用户这儿,它默认的表空间叫users,但是users的限额是无

这个时候并没有分配任何的空间,来给我创建这个表,那你得分配点空间吧,你可以讲无限制,

你可以给他一个限制,比如我们这里多少兆,分配给你5兆,这个根据实际问题的需要,我这里分配了5兆给我,

atguigu的users表空间

应用好以后我们再回来,再执行刚才那个操作,这里就执行好这个操作

这里的这个表就创建好了

select * from emp;

这个表没有任何数据,你也可以进行增删改的一个操作,这是我们在讲完oracle数据库给大家讲的,数据库的

一个管理,那么我们这一节相当于我们通过命令行的方式,来实现我们刚才一系列的操作,刚才是图形化的操作,

非常好理解,如果没有图形化界面,我们就需要使用命令行的方式,命令行方式,首先提到了一个叫权限,数据库的安全性,

分为两个,一个叫系统的安全性,一个叫数据的安全性,我们在安装ORACLE数据库的时候,给大家提到了说,ORACLE数据库

管理系统,分成了两块,一个叫ORACLE数据库,一个叫ORACLE实例,大家你回忆一下,ORACLE数据库你可以理解成你想要保证

数据库整个的安全性的话,分为系统的安全性,对应的叫ORACLE数据库,ORACLE实例其实是对于数据的一个权限,你要保证

这两块的安全性,然后下一个叫权限,这里分别是系统权限和对象权限,就是对应我们对象权限

系统权限是对于数据库的权限而说的,对象权限是操作数据库对象的权限,这个数据库对象也有可能是别的用户的,

我可以讲别的数据库的权限赋给他,比如说我们将SCOTT用户,scott用户里面有很多表,其中有一个表叫employees,

把这个表的select权限赋给用户

我们在atguigu用户这,就可以进行一个查询,scott用户的employees

select * from scott.employees;

你要是想访问别的表是不行的,因为这个权限没有给你

select * from scott.departments;

这是我们讲的系统权限和对象权限

系统权限说了,大概有100多种有效的权限,这都能看到,有100多种系统的权限,数据库管理员叫DBA,

他具有高级权限,以管理任务,刚才我们就是以DBA来登陆的,DBA登陆的话,可以创建用户,你可以创建用户,

也可以创建角色,还可以创建概要文件,等等,甚至存储里面表空间,也可以来创建

所以说这个DBA的权限是挺高的,同时DBA它同时也是一个角色,在角色这块是有DBA

如果你把atguigu的用户给他增加一个DBA的角色,那这个哥们的权限就很高了,atguigu用户的权限就很高了

那么DBA的权限都有哪些,如何创建新用户,删除用户,删除表,备份表,这是我们的系统权限

那下面就是我们要讲的我们如何通过命令行的方式,来实现刚才我们在控制台的这样一个操作,

那首先我们要通过如何通过命令行的方式,创建一个用户吧,用命令行来创建用户,创建用户DBA

使用的叫做user,这个不陌生吧,我们前面讲创建表叫create table,创建视图叫create view,

创建序列create sequence,那创建用户呢,叫create user,因为每一个用户都要提供一个密码,

所以用的叫identified by,通过哪个来识别,相当于给用户的一个密码,我们这里通过这种方式来

创建一个用户

创建用户的话,你atguigu他不是一个DBA,所以用它创建是不可能的,我们这里用谁啊,scott用户是不是也不靠谱,

scott用户他也不是一个DBA,在这我们就能看到,他没有,那你用谁啊,你看这个system,他是一个DBA

system是可以来创建的,把这个scott给他关了,用system来登陆,orcl

这里是system,登陆完以后,现在来创建一个用户,create一个user,起个名字叫atguigu,atguigu01,

每个用户要提供一个密码,叫identified,这个单词需要大家掌握,识别,识别码也是用的这个单词,

identified by,提供一个密码,提供跟他一样的,回车

是不是就创建成功了,那创建成功以后,那在这儿扫一眼,看一下,你看这个是多了一个叫atguigu,

说明我们通过命令行的方式创建成功了,来登陆一下,我们试图使用刚才使用的atguigu01来登陆

大家看到,是不是不像我们图像化界面的方式,他提示的错误说,缺少一个叫create session的权限,

被锁定了

图形化界面的方式,创建完以后就能登录了,这儿进不去,这里提示的错误说,缺少一个叫create session的

一个权限,被否定了,刚刚说的create session就是用来登录的,说明你这个用户没有这个权限,我们看一下是不是

真的有,刚才我们创建的atguigu,他这里有一个角色

这里面有一个权限,相当于他就有了,这个atguigu01,角色你看这儿,默认的通过命令行的方式,

,默认的情况下不会提供给我一个connect一个角色,系统这儿也没有

所以你肯定是登陆不进去的,登陆不了数据库的,那怎么登陆,是不是你得赋予我create session这个权限,

那赋予权限怎么来操作,我们看这,用户创建完以后,下一步叫做用户的系统权限

我们下面就来讲如何来赋予这个权限,那我们首先得看看有哪些权限,常用的一些权限,以应用开发者为例,

一般你得具有这样一些权限,首先你得创建会话,其次创建表,创建视图,创建存储过程,这个我们在PL/SQL当中

会给大家讲的,这是常用的一些创建权限,你得具有这些权限,那这些权限如何赋给新创建的用户,我们使用的

命令叫grant,哪一个权限,to哪个用户,grant哪个权限to哪个用户,这个grant如果你翻译过来的话,就叫做

授予,翻译过来就叫做授予,这个很多大家学习编程的,不是说编程本身难,他总觉得英语对他是一个比较大的

限制,英语不行,说实话,英语我刚开始学的时候也是有一种莫名的恐惧,因为你毕竟不认识,单词都不认识,

更不用说用在一起去如何操作了,在你真正开始接触以后,你就应该有这样的感觉,他无外乎就是一种单词,

甚至有的情况下,不会念,你知道他如何来操作就行,不像你上高中上大学的时候,学习英语,怎么知道你的英语能力强啊,

你得听说读写都会,每一个都得会,而编程程序员来讲,要求稍微低一点,你只要知道是干什么用的就行,你可以不会念,

但是你得会写,但是这是一般的程序员,但是如果你是优秀的程序员,还是得会念,大家你不要非得去背这个单词,他作为

专业词汇来讲,实际上词汇量并不会太大,包括大家看API,实际词汇量是比较少的,你看看几遍以后就熟了,但是大家一定

要去看英文文档,这样显得比较高端,这个单词叫做授予,相当于我就是可以授予,什么样的权限,给哪个用户,是这个意思吧,

那我们现在就通过命令行的方式,在system的用户下,我授予atguigu01这个用户,叫create session的权限,grant create 

sesssion,然后to atguigu01,

grant create session

to atguigu01;

我就赋予成功了,赋予成功以后我们再来登陆

登陆进去以后你想创建这个表

create table emp(
 id number(10),
 name varchar2(10) 
)

说权限不足,这个我很好理解,因为你并没有赋予这个权限,那我只要在system给他赋予一下,

grant create table,to atguigu01

grant create table to atguigu01;

赋予以后我们再来创建,还是他,这个时候就不是你的权限不足了

create table emp(
 id number(10),
 name varchar2(10)
)

现在就不是权限不足了,现在具有创建表的权限,只是表空间没有权限,那表空间没有权限,

那就是表空间赋予一个值,这是一个值,这个命令你需要掌握,你看一下就行,怎么赋予

创建用户的表空间,或者赋予用户的表空间,来进行一个修改,这个名字叫alter user,前面我们讲表的时候,

创建表叫create table,修改表就alter,所以说用户也是一样,用户也是需要alter,alter user谁,quota

unlimited,哪个表空间,on哪个表空间,相当于把这个用户的表空间,给他设置成一个什么样的情况,我们先操作

一下,先操作一下,那我仍然需要在system用户下,你不能再atguigu01下,它是没有这个权限进行修改的,只能在

system用户下,system下的话,alter user atguigu01,quota设置成多大的值,如果我写unlimited的话,就是没有

限制的,就是多大的都可以,就是 没有限制,你要是有限制的话,给你提供5兆,on我默认使用的表空间,users,作用在

users表上

alter user atguigu01 quota 5m on users;

我们再来atguigu下,执行这个操作,还是他

create table emp(
 id number(10),
 name varchar2(10)
)

大家看到,这个时候我们就创建成功了

select * from emp;

或者你从控制台这里你也能看到,atguigu01这个用户

默认表空间是users,限额是刚才我们写的5兆

角色没有,权限有两个

这是我们讲的这样一个内容,我们刚才这样一个操作,大家注意到都是在这个system具有DBA权限的用户下,

就是这种用户他才会有权限创建表,创建用户,然后给这个用户赋予权限,甚至改变表空间的大小,在system用户

下的,你想在atguigu01下是不行的,alter user,我们更改一下表空间,alter user atguigu02,quota unlimited,

on users表空间

alter user atguigu02 quota unlimited

on users;

就没有这个权限,这个是需要大家注意的,你是不行的,但是你哪个行啊,你干什么行啊,你要说你想改改你的

密码,这个应该是可以的,就像大家你去工作以后,正常公司里面都会分配每个人一个企业邮箱,这个企业邮箱本身

是没有你的,然后你进去以后,数据库管理员,或者公司管邮件这一块,它会给你分配一个用户名和密码,那就类似

与系统用户来创建一个用户名和密码一样,然后给你以后,它会告诉你的用户名是什么,密码是什么,是不是就可以修改,

而且建议大家第一个你要做的事,是把你用户的密码给改了,对于本人来讲,你改改你的密码是没有问题的,但是你不能改

比如说,邮箱大小太小了我自己改一下,那你没有这个权限,只有数据库管理员才有,那么改一下密码怎么改,我们在atguigu01,

就是你本身这个用户下,alter user atguigu01,我们这里是01,我们这里应该写atguigu01,但是问题还是照样报的,权限不足,

alter user atguigu01,identified by,我还是写atguigu

自己是可以修改密码的,但是想分配表空间是不行的,这个是需要大家注意的,这里我们就相当于把这个事说清楚了,

我进行了这个操作了,下一个操作就说一下这个角色

刚才我们说了,我们创建atguigu这个用户,我可以额外的创建一个角色,利用系统已经存在的提供给我们的一个角色,

是赋予我这个用户

我这个用户就有connect这么一个角色,角色的作用我们刚才也提了,是不是就这样,你要是这里有几个权限的话,

现在分别要赋予这几个人,挺麻烦的,必须把每个权限赋予每个人,这个是这样操作的,这一共相当于操作12项了,

如果有角色的话就很好办了,这里就有一个角色叫manager,这个角色就有4个权限,那么谁是manager,谁具有这四个

权限,就相当于把manager赋给谁,相当于对已有的权限,系统的权限和用户的权限,我把相应的系统权限和对象权限

封装在manager这个角色里,把这几个角色赋给这几个用户,你看这个操作瞬间就清晰了,就清晰了,这个就是我们说的角色

的作用,然后我们如何通过命令行的方式来创建角色呢,就这样,创建角色,create role,role是不是就是角色,role这个角色,

create role就是创建角色,谁,然后呢

相应的一些权限赋给角色,再把这个角色赋给用户,就是这样来操作的,当然前提还是得在system用户下,

我们在这儿来创建角色,create role,这个角色创建什么,我就叫my_role得了,创建好了

create role my_role;

那么创建好以后,想看的话就可以看一眼,角色这就有一个my_role,而且这个时候都是空的

那我创建这个角色以后,对这个角色赋予相应的一些权限,grant create,session,保证你能够登录,然后

create table,再加上一个,create view,然后to my_role

grant create session,create table,create view to my_role;

我就把这样三个权限赋予这个角色,你看是不是就多了三个权限

三个基本权限,有了这三个权限以后,这个角色就有了他自己的一个功能,我把角色给某一个用户,

那这个我就赋给一个新用户,我就再创建一个好了,create,这个叫user,atguigu02,identified by,

atguigu02,创建了一个用户

create user atguigu02 

identified by atguigu02;

创建好以后,我现在叫grant,my_role,grant还是叫授予,我把这个角色授予,atguigu02,

授予成功

grant my_role to atguigu02;

授予成功,这个授予的话就相当于大学的校长,正常大家大学毕业,毕业以后应该怎么着,

都是仿照西方称谓的,校长穿着校长服,grant叫授予一个学士毕业,grant他,赋给了他,

现在他就有了一个角色,my_role的一个角色,我们以atguigu02登陆一下

我这里登陆的时候,刚才我们的atguigu01,创建以后,登陆不进去,因为你这里没有session,现在我这里

能登了,因为my_role这个角色里边,封装了这个权限,同样的道理,还可以创建这个叫table,这个还是表

空间的事

create table emp(
 id number(10)
);

这个时候他提的是表空间的事,而没有提没有权限,说明create table的权限是有的,那你这个时候就查一下表

空间就行了,就是alter user atguigu02,多大的空间,这个我们就不操作了,至少你这个权限是有了,你在这你可以看,

我们找到用户

atguigu02,你看,角色

这里面有哪些权限,我们就来角色这里看,刚才已经看了,是吧,相当于他就具有了create权限,

这是我们说的这个事,说的这个事,那下一个的话,说了角色了,说了系统了,下面限额也说了,

下一个就是对象呗,我如何将其他数据库对象的权限赋给其他的用户,我们这个表对象,对象

这一块我们先看看,这是修改密码的操作,修改密码用户本人就可以

这是对象的权限,增删改查,数据库的对象

对象的权限,不同的对象具有不同的对象权限,对象的拥有者拥有所有的权限,

那就意味着对象的拥有者他自己可以向外来分配权限,他自己可以拥有分配权限,

对象指的是什么啊,就是我们的数据库对象,表啊,视图啊,序列啊,索引啊,同义词啊,都叫对象,

就是我们前面讲的,这个对象大家你看,意味着是不是说,scott用户,我们这里没有scott用户,

scott用户有一些对象,数据库对象有哪些,那一堆表吧,他具有这一些表

atguigu01,对象,scott用户你看他有很多表

我把这个表赋给谁,我把这个表的一些权限赋给谁,当然呢,你作为DBA的system用户,也可以有这个权利把这个

赋给谁,但是我们至少可以说明拥有者至少有这个权限,不一定要是系统用户,来做这个事,怎么来分配,大家来看

这个操作,grant什么一个操作,on哪一个数据库对象,然后给了谁,是这样来理解吧,最后还有一个with grant option,

这个我们一会说什么意思

我们分配这个表叫employees的,查询权限,grant select的权限,关于employees这个表的,然后赋予给sue和rich,

这样两个用户,如果你分配更新权限,grant update on哪个用户的哪个表,然后to atguigu,我们操作一下,操作的话,

既可以在系统用户这,也可以在scott用户本身,那我们假设在系统用户这,操作就得这样,还是叫grant,授予,授予什么

权限啊,比如说是一个查询的,select,grant select,或者你说再加一个权限,你就在这加个逗号,update,on哪个表,

scott用户的employees表,然后给了谁,叫to.atguigu01,给了他了

给了他以后,我们就可以在atguigu01这里,这个用户之下,我select,select from scott用户的employees

select * from scott.employees;

这是一个查询,刚才也赋予了一个叫什么,是不是update,意味着可以修改,可以修改,

那修改一个我们试一试,update,scott用户,employees这个表,set比如我们把这个人,我把最后这个

人的名字给他改一改,set last_name等于'ABCD',然后where employee_id等于206,我进行了一个update,

update scott.employees

set last_name = 'ABCD'

where employee_id = 206;

刚才这儿我们看到了,查询的是scott用户的employees,他没有复制过来,他还是调用原来scott的,

那你大家说,我这里更改,更改的,有没有把scott真正的表给改了,应该是改了,因为你把这个权限给了我了,

那我就能改,我改的就是你,你怎么证明啊,我们用scott用户登录一下

登录我查询一下不就知道了

select * from employees;

大家看,这个没有改,为什么没有改,我们这里还忘了一个操作,atguigu01

commit;

提交,再来

select * from employees;

我们再看是不是修改了,我们得commit提交一下才行,这就是你修改过的,说明我们确实可以通过这个来改,

原因在于你你把这个权限赋给atguigu01了,这个权限不是scott赋给的,是system赋给的,system是一个系统用户,

他的系统权限很高,它能够决定把某个人的权限给另一个人,这样的意思,当然scott用户本身也可以来决定这个事,

他自己来决定,因为这个数据库对象本身就是你的,所以我可以自己来决定,比如说grant select这个权限,关于这个

吧,emloyees这个表的,我赋给谁啊,to atguigu02,给了atguigu02

然后atguigu02我们就可以来进行查询了,select * from,scott用户的employees,就可以了

select * from scott.employees;

你要是不想查询employees,你想查询departments,这就查不了

select * from scott.emplouyees;

因为我没有给你这个权限,我要给的话还是得在这,比如on departments

grant select

on departments

to atguigu02

然后给了你以后,你就可以进行一个查询了

select * from scott.departments;

这个就是我们说的关于对象的权限,也就是对应我们这里的对象的权限,这里写了

然后我们这个内容就说到这儿了,包括系统这块也是有这个

也有个叫选项管理的,我们当时讲数据库管理的时候提到过一下,这个叉对应的叫勾,他两

有什么不同,这个叉表示说,它是没有权限再授予别人了,而这个勾表示,这个叫atguigu01

这个用户,我一旦有了create table的权限,我还可以把这个权限授予别人,或者这个对象这儿,

你具有update和select,scott一个表的一个权限

表示你这个表不能够授予别人,那打勾你还可以授予别人,就有点像方法,可以被你的子类继承与否,

如果你可以让子类去继承,就是勾,如果不能就到此为止,你就不能找你的子类再去实现这个方法了,

这里你就不能再授予别人了,就像大学毕业生一样,校长赋予了你一个权限,不能说校长赋予你学士学位的

权限,学士学位的一个能力,然后你又把这个能力给了别人,你就成了办证的了,这个我们说一下,这个操作

如果是勾的话,默认的话就是打叉的,那要想把它再变成勾,我们通过命令行的方式怎么来写,就是这个

叫with grant option,这个就是说我可以使用户有分配权限的一个权力,分配权限的一个权力,我们举一个例子,

大家你看这个时候,atguigu01这个用户,只有这两个权限都是他,我现在给他增加一个权限,我随意的在系统用户

给吧,grant select一个权限,on scott用户的,departments,大家注意我要是在系统用户这一定要显示的加上一个

scott,你要是scott用户本身来赋予其他用户的话,就可以省略了,他这个departments这个权限,赋给atguigu01,

然后with grant option,相当于你有授予的一个行为,就相当于你可以给别人了,有了

grant select 

on scott.departments

to atguigu01

with grant option

有了以后,你看这个命令行这儿,关了重开,大家看,这个时候就多了一个操作,而且可以授予别人

意味着我可以给别人这样一个权限,给别人这个权限的话,我给谁啊,给atguigu吧,给这个用户吧,你看他这个对象是没有的

我给他,我们这样来操作,你在atguigu01下,来操作,grant,select,on scott用户的,

departments,to atguigu,给了

grant select

on scott.departments

to atguigu;

再看一眼

大家看是不是有了,那你默认的还是不能够给别人,假如你再进行一个查询,在atguigu这个用户这,

select * from, scott用户的,departments

select * from scott.departments;

就有这个权限,可以赋给别人的,对应的就是with grant option,对应的叫public,public就是公共的吧,

就是我们JAVA中的public权限修饰符,我可以将这个权限,关于这个用户的这个表的,给了所有人,给了所有

人叫public,这个意思,举个例子,我们scott用户还有一些表,比如locations,locations表

查询一下

select * from locations;

然后你在其它用户下查,比如atguigu02,select * from scott用户的,locations表

select * from scott.locations;

肯定查不了,因为是无效的,但是呢,我只要给他分配一下就行了,叫grant select,别的权限你要是想给他加,

update也行,on他自己的locations表,to public

grant select,update

on locations

to public;

他给了所有的用户,他给了所有的用户以后,然后再回来看,我现在还是在atguigu02查询

select * from scott.locations;

我们换一个,atguigu01,select * from,scott用户的,locations

你在atguigu02这也行

select * from scott.locations;

说明你把查询locations这个表的权限,给了其他的所有人,你在system这儿必然可以查,他这个权限比较高
你不赋予我我也可以看,我不光可以查,还可以赋予别人,那么最后我们还有一个操作,就是最后一个,

还可以收回权限

收回对象的权限,我刚才把这个权限给了你了,我现在还可以收回,收回用的是什么,是revoke,

revoke收回,revoke叫收回,比如说这个校长,给你颁发了学士学位之后,发现你这个学分没有修够,

校长还可以收回,叫revoke,收回哪一个权限,增删改查,关于哪一个数据库对象的,从哪一个用户里边,

从哪个用户里边,比如说举个例子,我atguigu01下,他有哪些权限,我把其中的一个给他收回了,咱们来看,

你看这个命令

其中有一个,大家了解一下就行,用户拥有的关于表对象的权限,表对象的权限,那我们就看看他,我在atguigu01下,

select * from,USER_TAB_PRIVS_RECD;

我们能看到,这个atguigu01这个用户,有哪些对象权限,是关于scott用户的,这两个表的

这样的一个权限,是不是有这个,你现在进行查询,是没有问题的,select * from scott用户的,

叫employees

select * from scott.employees;

我现在给你收回,收回的话我在scott这里可以操作,在system这里也能操作,随便选一个吧,叫revoke,

select on,这个叫employees,from atguigu01

revoke select

on employees

from atguigu01;

我你这把这个权限收回,收回以后,你再来进行这个查询

select * from scott.employees;

你现在查不到了,你在这里也能够看到,现在你atguigu对象权限这儿,少了

没有操作employees表的权限,因为我收回了,就是这个意思,相当于你看这些权限,是在图形化界面上,但是如果你不用

图形化界面的话,你就得用它,通过它你可以看到用户的系统权限,举个例子,随便找一个,atguigu02,select * from,

USER_SYS_PRIVS;

这没有,我们是在角色里的,没有在他这,我们换一个人,他有

select * from USER_SYS_PRIVS;

他有创建表,还有create session,这个说你不可以再赋予别人,这是我们说的这个内容,这个内容说完以后,

我们关于这一节的关于控制用户权限,这样就讲完了,最后总结一下

创建用户叫create user,创建角色叫create role,我们可以把这个角色,或者系统权限,

通过grant的形式,赋给你这个user,当然我还可以来修改这个user,能修改哪些内容,修改你的密码,

给你分配一下表空间,都是这个命令,然后我们还可以相应的给你赋予的这些权限revoke,revoke和grant

是一对反义词,他两是一对反义词,相应的这他标注的,创建用户只能由DBA来完成,create role也得是他,

当然你这个赋予权限,尤其是赋予对象权限,你可以赋予哪个数据库用户的,什么权限给另一个用户,前一个用户是

谁的对象,他也有grant的权限,如果是系统权限的话,当然还是得由DBA来分配的,这就是我们这一节的内容,讲到这

就讲完了,然后我们看一下这一节的练习题,大家都操作一下,我们做这个练习题
1.	如果用户能够登陆到数据库,至少需要哪种权限?是系统权限还是对象权限
     CREATE SESSION 系统权限

如果用户登陆到数据库,至少需要哪种权限,是系统权限还是对象权限,这个我们是不是讲了啊,这个

操作叫create,需要哪种权限,session,create session这种权限,它是一个系统权限

2.	创建表需要哪种权限?
CREATE TABLE

创建表需要哪种权限,创建表就是create table,这叫创建表的权限,我们讲系统权限大概有100多个

create table或者create any table都行

3.	将表departments的查询权限分配给用户system
GRANT select
ON departments
TO system

这是一个对象权限吧,上这两个是系统权限,对象权限分配给他,grant select的一个权限,on哪个表,

departments这个表,给了谁,给了用户system,给了他

grant select

on departments

to system

grant哪个操作,on哪个表的,to谁

4.	从system处收回刚才赋予的权限。
REVOKE select
ON departments
FROM system

把这个权限给他收回,把刚才分配的权限给他收回,revoke select,on departments这个表,from system

revoke select

on departments

from system

把这个权限收回

5.	创建角色dvp,并将如下权限赋予该角色
	CREATE PROCEDURE
	CREATE SESSION
	CREATE TABLE
	CREATE SEQUENCE
	CREATE VIEW

1)CREATE ROLE dvp;
2)GRANT CREATE PROCEDURE,CREATE SESSION,CREATE TABLE,CREATE SEQUENCE,CREATE VIEW 
TO dvp;

创建角色dvp,并将如下的权限赋予该角色,如下的这几个权限赋予该角色,创建一个角色,只有DBA,只有DBA角色的用户,

才可以创建角色,create role,翻译过来叫角色,叫dvp,一回车就创建了

create role dvp;

这是第一步,第二步,创建好以后,相应的这样一些权限,grant create procedure,这是什么,这是存储过程,然后create

session,create table,创建一个表,create sequence,create view,换一行to,dvp

grant create procedure,create session,create table,create sequence,create view

TO dvp;

这个角色就有了这些权限,你就把这个角色赋给哪个用户,grant dvp to atguigu01,这是我们这一节的练习,这个在我们之前

数据库管理的时候,大家如果有精力的话,怎么来实现的,你亲自要去实现一下才行

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值