天天看點

oracle的schema的基本概念及與User的差別

Oracle schema可視為同一個使用者所擁有的所有資料庫對象(schemaobjects)之集合。舉例來說,使用者scott所建立的EMPtable其完整名稱為SCOTT.EMP,而SCOTT就是EMP的schema名稱。是以schemaname其實就是一個Oracle資料庫之使用者帳号,Oracle的schemaobjects隻存在于tablespace中。

首先,可以先看一下schema和user的定義:

A schema is a collection of database objects (used by auser).

Schema objects are the logical structures that directly refer tothe database’s data.

A user is a name defined in the database that can connect to andaccess objects.

Schemas and users help database administrators manage databasesecurity.

從中我們可以看出,schema為資料庫對象的集合,為了區分各個集合,需要給這個集合起個名字,這些名字就是在企業管理器的方案下看到的許多類似使用者名的節點,這些類似使用者名的節點其實就是一個schema。

schema裡面包含了各種對象如tables, views, sequences, stored procedures,synonyms, indexes, clusters, and database links。

一個使用者一般對應一個schema,該使用者的schema名等于使用者名,并作為該使用者預設schema。這也就是在企業管理器的方案下看到schema名都為資料庫使用者名的原因。

Oracle資料庫中不能新建立一個schema,要想建立一個schema,隻能通過建立一個使用者的方法解決(Oracle中雖然有createschema語句,但是它并不是用來建立一個schema的)。在建立一個使用者的同時,為這個使用者建立一個與使用者名同名的schem并作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一對應并且相同,所有我們可以稱schema為user的别名,雖然這樣說并不準确,但是更容易了解一些。

一個使用者有一個預設的schema,其schema名就等于使用者名,當然一個使用者還可以使用其他的schema。如果我們通路一個表時,沒有指明該表屬于哪一個schema中的,系統就會自動給我們在表上加上預設的sheman名。比如我們在通路資料庫時,通路scott使用者下的emp表,通過select* from emp; 其實,這sql語句的完整寫法為select * fromscott.emp。在資料庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在建立對象時不指定該對象的schema,在該對象的schema為使用者的預設schema。這就像一個使用者有一個預設的表空間,但是該使用者還可以使用其他的表空間,如果我們在建立對象時不指定表空間,則對象存儲在預設表空間中,要想讓對象存儲在其他表空間中,需要在建立對象時指定該對象的表空間。

有人舉了個很生動的例子,來說明Database、User、Schema、Tables、Col、Row等之間的關系

“可以把Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的床,Table(床)就被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了。

然後床上可以放置很多物品,就好比Table上可以放置很多列和行一樣,資料庫中存儲資料的基本單元是Table,現實中每個倉庫放置物品的基本機關就是床,User就是每個Schema的主人(是以Schema包含的是Object,而不是User)。

其實User是對應與資料庫的(即User是每個對應資料庫的主人),既然有操作資料庫(倉庫)的權利,就肯定有操作資料庫中每個Schema(房間)的權利,就是說每個資料庫映射的User有每個Schema(房間)的鑰匙,換句話說,如果他是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是他的(包括房間),他有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間。還可以給User配置設定具體的權限,也就是他到某一個房間能做些什麼,是隻能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了”。 ------------------------------------------------------------------------------------------------------ Oracle資料庫中Schema和User的關系是一一對應的,也就是說一個Schema隻對應一個User,一個User對應一個Schema。當某個User下面有table,view,Index......等SchemaObject時,這個User就成了一個Schema,也就是在EnterpriseManager中出現的那個,如果某個User下面沒有table,view,Index......等SchemaObject時,這個User不會在Enterprise Manager中Schema對象出現。 ------------------------------------------------------------------------------------------------------oracle概念之-user和schem差別: 在介紹user和schema之前.大家先看看下面這個語句.

grant select  onx.tba  to y;

看看x是user還是schema? y是user還是schema?

正确答案: x是schema. y是user.

我們從oracle設計上面來解釋一下這兩個概念.

oracle的user.或者任何系統的user.隻有兩個功能,先是認證,然後是授權.

認證是乘認這個user是合法的.

授權是這個user在這個系統能夠做些什麼.比如你可以create table.等等.

schema這個概念有些稍微複雜.

比如我們做了一套進銷存系統.

這個系統總共有3個子產品.一個是銷售子產品,一個是庫存子產品,一個是财務子產品.

schema就是表示子產品的意思.schema 完全是設計系統的時候子產品化需要.他的定義也很說明了這一點,是對象的集合.

整個系統是按照schema來劃分的.schema讓系統更加清晰化,子產品化.如果用過oracleERP的使用者就更加清晰.ERP裡面都是按照子產品來劃分的.有銷售,市場,财務,人事等等.

再看看

grant select  onx.tba  to y; 這句話.

x是表示某個子產品的. x.tba 是表示某個子產品底下的某個對象.

把這個子產品底下的對象付了一個select 權限給使用者y.

想想看.我們在建立使用者的時候是怎麼樣的.

當我們建立好使用者以後,使用者是不能做任何事情的,隻有我們付給他們登陸權限,他們才能登陸.付給他們create table.他們才能create table. 就是表示的這樣一層意思.