上次我们主要讲了ORACLE基本的SQL,SQL语法,然后很多同学用的可能是MYSQL,可能没那么大兴趣,但是我还是
觉得以后ORACLE是主流啊,上次讲了ORACLE的一些语法,还有高级的查询,比如说MERGE,START WITH CONNECTOR BY
这是递归,还有ORACLE的一些统计分析函数,那么咱们继续,争取把这些讲完,首先用户访问控制,索引,物化视图,
同义词,DBLINK,简单介绍一下,首先说一下用户的访问控制,你使用ORACLE,相当于扫盲,就是用户控制这一块
这块是非常简单的,比如用户装完数据库以后,发现SCOTT,或者HR,其他用户被锁住了,或者想锁定,
利用这几个语句,然后向修改密码的,然后查看用户表信息,创建用户和删除用户这里面都有,然后加上
名称,identified by [password] 这是你自己写的,可以直接指定自己的用户密码,删除用户采用drop
ORACLE里面有对象的概念吗,比如所属用户的对象,比如对象的视图啊,其他的东西都可以被删除
我还是用PL/SQL Developer,然后还是用scott去登陆,我现在用的是一个最普通的用户,用的是scott这个
用户登陆的,然后我的左上角有很多的WINDOW,,比如SQL Window,Report Window,Command Window,
那我们可以用Command Window去连一下管理员,管理员用户, conn system/tiger
我这个PL/SQL Developer是用scott登陆的,但是我在Command命令里面,登陆的是System,那我就可以对其他的用户进行授权,
做一些其他的事情,你比如我们的里面的HR,HR的用户我是处于解锁的状态,我看我能不能登陆进去,比如我conn hr/tiger
select * from tabs;HR的用户里面可能有这几张表
只不过HR里面的数据量会比较大,目前我这个HR用户是可以登陆的,默认肯定都是锁着的,那我可以用这几个命令去操作,
比如用alter user[USER] account lock,alter user hr account lock;
权限不足是因为你现在登陆的是HR,你自己不能锁自己,所以你得用system,你用scott也是不行,因为权限不足,
你得用system去登, conn system/tiger,然后去锁住他
他跟我说用户不存在,那我就锁一个scott试一下
这个可以去做的,我这个hr怎么不存在呢,那我现在如果用scott登陆就不行了呗,conn scott/tiger,
他就说已经被锁住了
那我先可以去解锁,alter user scott accoutn unlock;还是用system去登陆,然后去解锁
这都是可以的,我们在这里再使用一下scott, conn scott/tiger,这回就登陆进来了
他就登陆进来了
看到这几张表了,就是非常简单的这几个操作,还有是设置一个用户,用户名是自己指定的,可以自己建立一个新的用户,
然后identified by,然后后面是密码,查看用户的表信息,这肯定是DBA去,用户信息表,然后还有创建用户和删除用户,
这两个命令,先不说了,太简单了,简单的了解一下
然后赋权这个事也是简单的了解一下吧,这个我不想说太多,如果我给一个用户进行赋权的话,grant 这个权限 to 这个用户,
如果回收的话,revoke 这个权限 from 这个用户,比如查看这个用户所有的权限,select * from session_privs,我们可以
看一下,我用SCOTT登陆的
当前SCOTT这个用户可能有这几个权限,就是这几个权限,SCOTT有的,10个权限,
然后我再去开启一个窗口吧,Command Window,我这个窗口用system等一下, conn system/tiger,然后我去给他赋一个权限,
这个很简单,就是grant 加一个权限 to 哪个用户, grant view to scott,这个权限就啥来的,grant createview to scott
就是我已经给他赋了createview这个权限了
那这个时候我的scott用户呢他就能有createview这个权限了,然后如果想要回收,也非常的简单,就是revoke,
revoke 权限 from 用户,权限也是createview这个权限,然后from咱们的scott这个用户,revoke create view
from scott
再次去看看他的权限
这就是简单的授权和赋权,你得用system用户去登陆,还有其他的,在咱们的ORACLE里面,最著名的两个角色,除了dba之外,用的两个
角色就是connect,resource,你自己去做一个实际库实例的话,你指定DBA就可以了,但是有的时候你可以指定connect,resource,
给一个用户指定这两个权限,然后说完了之后,简单的说一下,我就不操作了,比如我们重新建立一个用户,叫zhangsan,给他去指定
密码,也叫1234,然后这个用户建立好了以后,那第一件事我就是要干什么,因为这个用户你刚建立好,你可以给他分配权限,然后
加上什么表空间啊,一堆东西,然后zhangsan我们可以分配connect和resource两个权限,你会发现,除了正常的权限之外,应该和
scott这个用户去做对比,scott用户有10个权限,你新建zhangsan这个用户,比如scott多一个权限,就多了一个unlimited权限,
那这个权限是干啥用的呢,他的含义是拥有所有表空间配额的使用权限,整个ORACLE所有的地方我都能用,这个权限就太大了,
一般我们在真实的生产的时候,我建立完一个用户之后,我需要把表空间份额的权限给回收,执行这句话,revoke unlimited
tablespace from 当前zhangssan这个人,回去可以自己去练一练,然后你就可以去查看用户的缺省表空间,
select username,default_tablespace from user_users,创建用户的时候也可以指定用户他指定的表空间是什么,这个也是
可以去做,然后重新去分配一下用户的配额,alter user zhangsan quota 10m on users; 10m是10兆,我这里随便写的10M,
on在一个表空间,ORACLE缺省表空间,一般都是users,比如咱们的scott
这是名字,它是缺省表空间,我新建zhangsan,缺省表空间也是users,那我可以干什么事呢,我可以重新给他一个配额,
alter user zhangsan quota 10m on users;给他100M,你给他一个G,都可以的,然后下面就是说,你可以让新用户,
拥有对scott.emp表的一个权限,怎么做呢,grant select这个权限,on scott.emp这张表,to给谁,
grant select on scott.emp to zhangsan,给张三这个人,你想新建的用户张三,在scott这个schema上,
去创建表的权限也可以,grant create any table to zhangsan;随便起个名字叫zhangsan,然后还有什么啊,还有让新建用户
拥有scott.emp表的修改权限,就是我新建的一个用户,修改scott这个Schema,emp修改字段的权限,直接grant select,update
,并且可以指明那个字段的权限update(sal),on emp表,to给谁,给这个tim, grant select,update(sal) on emp to tim;
可以精确到这个字段,这是可以这么去做的,这个东西无论是你用到了还是用不到,或者是你以后要用,这两个事简单的说一说,
关于权限这个事
然后再往下看,如果你要做ORACLE的话,假如你以后要考ORACLE认证的话,那肯定会有两件事,要考你这个权限,
传递和回收,在ORACLE这个权限一般用在什么地方呢,就是咱们开发写存储过程的时候,或者建立数据包的时候,package这个包,
在ORACLE里面有这个概念,建立包的时候你得给他赋一些权限,当前的一些用户,都的有执行存储过程的权限,这个时候就得用到
这些权限,一般来讲有两种,一个叫WITH ADMIN OPTION,WITH GRANT OPTION,这两个权限,你比如系统权限的传递和回收,配置参数
就是这样的,如果你要给他ADMIN这个权限的话,就会有一个总结的概念,叫覆水难收,啥意思,你赋出去的权限再也收不回来了,那
咱们可以看一下,看我这个操作,create一个user,创建了一个user,然后这个user叫tim1,我就不自己操作了,我觉得你们有兴趣的
操作一下,没兴趣的就算了,创建了一个用户叫tim1,指定密码identified by,密码也叫tim1,create user tim1 identified by
tim1;然后这里会有提示User Created也就是创建成功了,这样以后我这个tim1也就存在了,下面我做什么事啊,又创建一个用户
叫tim2,然后密码也叫tim2,两个用户创建完毕以后create user tim2 identified by tim2;往下走怎么做的,首先system
用户登陆去赋权,就是我说的system或者sys都行,赋什么权限呢,create session,能创建session,给tim1,tim1赋予权限给tim2,
也就是现在有3个小孩,第一个小孩叫做sys,刚才我创建了用户,一个叫做T1,一个是T2,T1和T2,他们两个都是一个干干净净的
一个用户的创建,然后我现在做一件事啊,我利用sys这个用户,就是系统用户,我做什么事啊,我把create session登陆的权限
给了T1,当前T1这个用户,就能create session,就是能登陆,他就能登陆了,然后我利用什么啊,由于我T1有
create session的权限,所以我T1这个角色去登陆,然后我去赋给第二个用户,叫T2,我给T2一个create session权限,叫cs,他们
两个都有create session的权限以后,看一下我们怎么去做的,首先是grant create session to tim1 with admin option;
我赋完权限以后还没完了,后面还多了一句话,叫做with admin option,这个就是一个权限的两种方案,第一种方案我赋权的
时候有这种权限,然后success,然后我在grant create session to tim2;这个事情做完了以后,这个时候我的tim1和tim2
都可以进行登陆,然后sys这个用户去回收tim1的create session这个权限,然后tim1肯定就不能登陆了,因为我已经把当前
的tim1这个create session这个权限,登陆的权限给去掉了,但是tim2还是可以继续登陆,这就是一个覆水难收的一个概念,
然后你发现tim1去进行登陆的时候,是不可以的,ERROR;但是tim2去登陆的时候是已连接,那这个权限总结,就是覆水难收,
当前我这个用户给了tim1 create session权限,然后tim1再把这个权限给tim2,然后这个时候sys不干了,我想把tim1的
权限回收掉,revoke回收掉,那么这个时候相当于什么啊,tim2还是可以正常登陆的,如果能够把tim2的权限也回收掉,
那这个事就麻烦了,它是不能够这么去做的,理解一下就行了,你回家可以去做这个操作
还有一个问题就叫诛连九族,这个叫grant option,后面加上with grant,这是什么意思呢,scott这个用户赋权
赋select权限给tim1,然后tim1赋select权限给tim2,就是我scott里面有一个emp表,然后就是T1和T2这两个小孩,都想去查EMP表,
那就由scott去给tim1他赋权,然后tim1再给tim2赋权,都是select权限给他了,那这个时候我们看一看,首先是grant select on,
emp这张表,to tim1,后面加上with grant option,grant select on emp to tim1;然后授权成功,授权成功的时候我使用
tim1去连接的时候,我去查scott.emp,可以看到表的一些信息,select * from scott.emp;可以看到emp表的一些信息,然后我下面做
的是什么啊,grant select on emp to tim2;这个时候是谁做的,是tim1把select on emp这个权限给tim2,然后我再利用tim2
再去连接的时候,tim2照样也能查看到表的信息,然后我再次用scott用户去登陆,我把emp表的这个权限,tim1的权限给他revoke掉,
就是tim1我不让他查这个tim1表了,然后撤销成功了以后,再次去登陆tim1和tim2,他们两个谁也都看不到emp这张表了,
这个好像就是诛连九族,之前你给别人的权限,只要我一回收,这是ORACLE讲权限DBA里面会考的两个问题,一个是覆水难收,
WITH ADMIN OPITON的时候,覆水难收,就是给出去的权限,只能回收一个,要不你就的一个一个的回收,他不会链条的
集体回收,如果你想要做这个事情,那你就得用with grant option,授权的时候用with grant option,这个应该不难,
大概能理解这个意思吗,很简单的是吗,这个是ORACLE里面权限的问题,加入你们用的都收ORACLE数据库的话,
你们用的可能都是MYSQL,对这个不感冒,你们都用ORACLE数据库的话,日常工作中肯定会用到这些命令,比如
我建了个Schema,定一下表空间,分一下配额,重新分配一下配额,然后再怎么样,然后我这个SCHEMA能不能看到这样一个
表的数据,或者怎么怎么怎么样,肯定经常会去操作的,包括授权的时候,我给他什么权限