数据库,实例,表空间,用户,权限,角色的理解sql
1.数据库和实例 数据库database:数据文件+控制文件+日志文件,都是一些物理上的文件。 数据库实例instance:数据库后台进程+内存区域 严格的说:一个Oracle服务,只包括一个Oracle实例和一个数据库(不考虑双机并行等这样的状况)。可是一个实例只能对应一个数据库,一个数据库有可能对应多个实例。数据库
2.默认表空间和临时表空间 临时表空间:用户查询以及操做时用到的表空间。好比排序,分组等,若是数据量比较大,那么内存不可能都分给这一个用户工做存储数据,因此会把一些数据放在临时表空间中,这样能节省内存空间。并且再次查询时可直接从临时表空间中调取,节约时间。 默认表空间:持久化表数据的地方 bash
3.用户与表空间 一个用户(1个schema), 必定有一个 默认表空间与默认的临时表空间 一个用户,若是建立用户时未指定默认表空间,那么系统将默认分配users表空间 一个用户能够拥有1个或者多个表空间的权限. session
create table test( id int); //将使用默认表空间
create table test2 ( id int ) tablespace DATA01 ; //将使用DATA01 表空间 复制代码
用户实际上和表空间没有直接的联系,若是把用户看做商人,表看做商品,表空间看做仓库,1个商人能够有多个商品,可是1个商品只能归属于1个商人,1个商人的全部商品能够放在1个仓库,也能够一部分放在A仓库,一部分放在B仓库。同时1个仓库既能够放甲商人的商品也能够放乙商人的商品,因此笔者理解商人和仓库经过商品间接产生多对多的关系,也即用户和表空间能够间接理解为多对多的关系 oracle
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:表) ui
5.角色 角色是权限集合,经常使用预约义角色connect,resource,dba,通常开发给前2种角色,查询角色拥有的系统权限spa
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语句会致使事务隐式提交,使用自治事务可解决日志