oracle一些易混淆的概念

1,079 阅读7分钟

引文

    数据库,实例,表空间,用户,权限,角色的理解

正文

1.数据库和实例                                                                                                                           数据库database:数据文件+控制文件+日志文件,都是一些物理上的文件。                           数据库实例instance:数据库后台进程+内存区域                                                                   严格的说:一个Oracle服务,只包括一个Oracle实例和一个数据库(不考虑双机并行等这样的情况)。但是一个实例只能对应一个数据库,一个数据库有可能对应多个实例。

 2.默认表空间和临时表空间                                                                                                         临时表空间:用户查询以及操作时用到的表空间。比如排序,分组等,如果数据量比较大,那么内存不可能都分给这一个用户工作存储数据,所以会把一些数据放在临时表空间中,这样能节省内存空间。而且再次查询时可直接从临时表空间中调取,节约时间。                                   默认表空间:持久化表数据的地方   

3.用户与表空间                                                                                                                           一个用户(1个schema), 一定有一个 默认表空间与默认的临时表空间 一个用户,如果创建用户时未指定默认表空间,那么系统将默认分配users表空间                                                               一个用户可以拥有1个或者多个表空间的权限.                                                                     

create table test( id int);     //将使用默认表空间                                
create table test2 ( id int ) tablespace DATA01 ; //将使用DATA01 表空间   

     用户实际上和表空间没有直接的联系,如果把用户看作商人,表看作商品,表空间看作仓库,1个商人可以有多个商品,但是1个商品只能归属于1个商人,1个商人的所有商品可以放在1个仓库,也可以一部分放在A仓库,一部分放在B仓库。同时1个仓库既可以放甲商人的商品也可以放乙商人的商品,所以笔者理解商人和仓库通过商品间接产生多对多的关系,也即用户和表空间可以间接理解为多对多的关系 

4.系统权限和对象权限                                                                                                                4.1 系统权限                                                                                                                         1)系统权限介绍   系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。oracle提供了100多种系统权限。   常用的有: create session 连接数据库                                                                                                     create table 建表                                                                                                        create view 建视图                                                                                                               create public synonym 建同义词                                                                                create procedure 建过程、函数、包                                                                                     create trigger 建触发器                                                                                                create cluster 建簇                                                                                         2)显示系统权限   oracle提供了很多种系统权限,而且oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图system_privilege_map,可以显示所有系统权限,sql语句为: select * from system_privilege_map ;                            

    4.2 对象权限                                                                                                                              1)对象权限介绍   对象权限指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。                                比如smith用户要访问scott.emp表(scott:方案,emp:表)

5.角色                                                                                                                                           角色是权限集合,常用预定义角色connect,resource,dba,一般开发给前2种角色,查询角色拥有的系统权限

select*from system_privilege_map order by name; //查询系统一共有哪些权限
select*from user_role_privs; //当前用户有哪些角色
select*from role_sys_privs ; //查询当前用户的所有角色权限
select*from user_sys_privs;  //查询用户有哪些显示授权的系统权限(这个表中没有通过角色获取的权限)
select*from user_tab_privs;  //查询用户有哪些对象权限

 以上查询都是针对当前登陆的用户,如果想通过dba来查询其它用户的相关权限、角色,只需把上面这些表名中的user换成dba,后面加上相应的查询条件即可                                            dba角色拥有所有系统权限,除了启停数据库                                                                          隐式授权:通过角色授权                                                                                                      显式授权:直接授权给用户                                                                                            oracle默认为定义者权限(相对有1个调用者权限),定义者权限在存储过程中隐式授权无效,需要显式授权 ,过程中的DDL语句会导致事务隐式提交,使用自治事务可解决