引文
数据库,实例,表空间,用户,权限,角色的理解
正文
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语句会导致事务隐式提交,使用自治事务可解决