Oracle中数据库、用户、方案、表空间、表对象之间的关系

一个服务器可以创建多个实例,每个实例里面可以放置数据库(注:我们的电脑就可以称为是一个服务器)

在Oracle中一个数据库就是一个实例,但在sqlserver中一个实例下面可以有多个数据库
( 注:sqlserver中的一个实例对应的多个数据库,此处也称为库。)

1.在Oracle中表是属于用户的,递进关系是:实例(数据库)->用户->表,
表是属于某个用户的,其他用户(除管理员外)想要访问表,必须得到该用户的授权,才能访问这个表,
所以用户如果想创建一个表,首先应该要有使用数据库表空间的权限,来给这个用户设置表空间,存放所创建的表。
这样就可以解释连接数据库的步骤了,首先管理员在数据库中先创建了一个用户,但此时用户还连接不上,先给他连接的权限。
连接上了,没有给其分配表空间,接下来再给他使用表空间的授权,才能让这个用户正常的创建表,使用增删改。
但在sqlserver中是不一样的,其中的表是属于数据库的,由数据库来创建表的,递进关系是:实例->(多个)数据库->表,
可以理解为用户对于库,表都是独立的。所以在sqlserver中,一般是建库,建表,建用户,再设置用户的可以使用哪些权限。
2. 在Oracle中,方案和用户是一一对应的,但并不代表着创建一个用户等于创建了一个方案,方案只有在用户创建第一个对象
之后,方案才随之而产生。之后用户下存在对象,则方案存在,用户下不存在对象,则方案不存在。

注:举个例子
SQL> Grant dba to scott
SQL> conn scott/tiger
Connected.
SQL> create table test(name char(10));
Table created.
SQL> create table system.test(name char(10));
Table created.
SQL> insert into test values(‘scott’);
1 row created.
SQL> insert into system.test values(‘system’);
1 row created.
SQL> commit;
Commit complete.
SQL> conn system/manager
Connected.
SQL> select * from test;
NAME

system
SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改变用户缺省schema名 Session altered.
SQL> select * from test;
NAME

scott
SQL> select owner ,table_name from dba_tables where table_name=upper(‘test’);
OWNER TABLE_NAME


SCOTT TEST
SYSTEM TEST

此处证明了用户在创建了第一个对象后,随后才产生了方案,默认方案的名字和用户的名字时一样,
但用户是可以改变指向的默认方案的,这里system用户最后又指向了scott的方案,也就是一个方案被两个用户所指向。
(注:此处system用户修改了方案,并不是说原来的不能再访问了,可以访问的,两个都可以,只不过系统会给用户设置一个默认方案的路径,也就是在访问对象时,如果前面不加方案的名字,则使用默认方案里面的对象,如果加别的名字,就可以访问别的方案里面的对象,前提是别的方案的归属者要将这里面对象的权限给你,而且不能给方案的权限,因为这是个逻辑概念,
在数据库中并没有定义,而是要一个对象一个对象的权限交付才行)->用户可以访问一个或多个方案,取决于方案的原主人有没有将方案里对象的权限给他。一个方案也可以被多个用户访问。
但因为原来的system方案中还存在对象,所以他不会消失,还存在。而且system用户仍有system方案的使用权限,所以仍可以继续访问。这里改变的用户方案,其实是默认方案。
(注:Oracle中的数据库其实就是方案的集合,因为方案是对象的集合,虽然在数据库中并没有真正的定义方案,只是一个逻辑的概念)

引用:
下面有个很形象的比喻,是从网上摘的,不妨一看: 我们可以把database看做是一个大仓库,仓库分了很多很多的房间,schema就是其中的房间,一个schema代表一个房间,table可以看做是每个schema中的床,table被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了,然后床上可以放置很多物品,就好比table上可以放置很多列和行一样,数据库中存储数据的基本单元是table,显示中每个仓库放置物品的基本单位就是床,user就是每个schema的主人,(所以schema包含的是object,而不是user),user和schema是一一对应的,每个user在没有特别指定下只能使用自己schema的东西,如果一个user想使用其他schema的东西,爱就要看哪个schema的user有没有给你这个权限了,或者看这个仓库的老大(DBA)有没有给你这个权限了。换句话说,如果你是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是你的,你有完全的操作权,可以扔掉不用东西从每个房间,也可以防止一些有用的东西到某个房间,你还可以给每个user分配具体的权限,也就是他到某一个房间能做些什么,是只能看(read-only),还是可以像主人一样有所有控制权(R/W),这个就要看这个user所对应的角色Role了。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43665244/article/details/108853690
今日推荐