Oracle User和Schema的區別(原創)
部落格分類: Oracle日常管理
概述
Schema和User的定義如下
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.
從定義中我們可以看出方案(Schema)為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡麵包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
一個使用者對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema。這也就是我們在企業管理器的方案下看到schema名都為資料庫使用者名稱的原因。Oracle資料庫中不能新建立一個schema,要想建立一個schema,只能通過建立一個使用者的方法解決。
Oracle中雖然有create schema語句,但是它並不是用來建立一個schema的,具體見下面官方文檔。
Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
To execute a CREATE SCHEMA statement, Oracle Database executes each included statement. If all statements execute successfully, then the database commits the transaction. If any statement results in an error, then the database rolls back all the statements.
這裡糾正下網上一些錯誤的觀點,Oracle在建立一個使用者的同時會為這個使用者建立一個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同。官方文檔如下
Note:This statement does not actually create a schema. Oracle Database automatically creates a schema when you create a user (see CREATE USER).
如果我們訪問一個表時,沒有指明該表屬於哪一個schema中的,系統就會自動給我們在表上加上預設的sheman名。比如我們在訪問資料庫時,訪問scott使用者下的emp表,通過
select * from emp;
其實,這sql語句的完整寫法為
select * from scott.emp
在資料庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在建立對象時不指定該對象的schema,在該對象的schema為使用者的預設schema。
深入理解user和schema的區別
不同的schema之間它們沒有直接的關係,不同的shcema之間的表可以同名, 也可以互相引用(但必須有許可權),在沒有操作別的schema的操作根權下, 每個使用者只能操作它自己的schema下的所有的表。不同的schema下的同名的表, 可以存入不同的資料(即schema使用者自己的資料)。 好比一個房子,裡面放滿了傢具,對這些傢具有支配權的是房子的主人(user),而不是房子(schema)。
你可以也是一個房子的主人(user),擁有自己的房子(schema)。可以通過alter session的方式
進入別人的房子。 這個時候,你可以看到別人房子裡的傢具(desc)。 如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。 至於你是否有許可權使用(select)、搬動(update)或者拿走(delete)這些傢具就看這個房子的
主人有沒有給你這樣的許可權了,或者你是整個大廈(DB)的老大(DBA)。
如果你想調用其他schema的對象(有許可權的前提下),但並沒有建synonym, 同時又不想把其他schema名字放入代碼中,就可以首先使用
alter session set current_schema=<schema_name>。
實際案例
SQL> SHOW USER;
USER is "SYS"
SQL> alter session set current_schema=SCOTT;
Session altered.
SQL> SHOW USER;
USER is "SYS" #切換Schema並不等同於切換User
SQL> SELECT COUNT(*) FROM EMP;
COUNT(*)
----------
14
SQL> alter session set current_schema=SYS;
Session altered.
SQL> SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> CREATE USER oe111 IDENTIFIED BY oePSWRD;
User created.
SQL> CREATE SCHEMA AUTHORIZATION oe111
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = 'RED'
GRANT select ON new_product_view TO scott
/
*
ERROR at line 1:
ORA-02421: missing or invalid schema authorization identifier
SQL> grant dba to oe111;
Grant succeeded.
SQL> CREATE SCHEMA AUTHORIZATION oe111
2 CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
5 AS SELECT color, quantity FROM new_product WHERE color = 'RED'
6 GRANT select ON new_product_view TO scott
7 ;
CREATE SCHEMA AUTHORIZATION oe111
*
ERROR at line 1: #切換該語句必須在同一Schema下才能執行
ORA-02421: missing or invalid schema authorization identifier
切換Schema
SQL> CONN OE111/oePSWRD
Connected.
SQL> CREATE SCHEMA AUTHORIZATION oe111
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = 'RED'
GRANT select ON new_product_view TO scott
/
參考至:http://blog.csdn.net/kimsoft/article/details/4627520
http://www.2cto.com/database/201205/131238.html
http://blog.sina.com.cn/s/blog_6c845fae0100peof.html
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6014.htm
本文原創,轉載請著名出處、作者
如有錯誤,歡迎指正
郵箱:czmcj@163.com
===========================================================================
Oracle中使用者和方案的區別 標籤: user schema 2011-03-07 09:04閱讀( 1124) 評論(0)
從定義中我們可以看出方案(Schema)為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡麵包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
一個使用者一般對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema。這也就是我們在企業管理器的方案下看到schema名都為資料庫使用者名稱的原因。Oracle資料庫中不能新建立一個schema,要想建立一個schema,只能通過建立一個使用者的方法解決(Oracle中雖然有create schema語句,但是它並不是用來建立一個schema的),在建立一個使用者的同時為這個使用者建立一個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一對應並且相同,所有我們可以稱schema為user的別名,雖然這樣說並不準確,但是更容易理解一些。
一個使用者有一個預設的schema,其schema名就等於使用者名稱,當然一個使用者還可以使用其他的schema。如果我們訪問一個表時,沒有指明該表屬於哪一個schema中的,系統就會自動給我們在表上加上預設的sheman名。比如我們在訪問資料庫時,訪問scott使用者下的emp表,通過select * from emp; 其實,這sql語句的完整寫法為select * from scott.emp。在資料庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在建立對象時不指定該對象的schema,在該對象的schema為使用者的預設schema。這就像一個使用者有一個預設的資料表空間,但是該使用者還可以使用其他的資料表空間,如果我們在建立對象時不指定資料表空間,則Object Storage Service在預設資料表空間中,要想讓Object Storage Service在其他資料表空間中,我們需要在建立對象時指定該對象的資料表空間。
oracle中的schema就是指一個使用者下所有對象的集合,schema本身不能理解成一個對象,oracle並沒有提供建立schema的文法,schema也並不是在建立user時就建立,而是在該使用者下建立第一個對象之後schema也隨之產生,只要user下存在對象,schema就一定存在,user下如果不存在對象,schema也不存在;這一點類似於temp tablespace group,另外也可以通過oem來觀察,如果建立一個新使用者,該使用者下如果沒有對象則schema不存在,如果建立一個對象則和使用者同名的schema也隨之產生。 =====================================================
Oracle使用者和模式的區別 2010-10-28 11:36 佚名 互連網 字型大小: T | T
Oracle使用者(user)是用串連資料庫和訪問資料庫物件的,那麼它和模式(schema)究竟有何區別呢?下文就將帶您尋找答案。
AD:
Oracle使用者是Oracle資料庫中的重要概念,下面就為您介紹Oracle使用者和模式的區別,希望對您學習Oracle使用者方面能夠有所協助。
(一)什麼Oracle叫使用者(user):
A user is a name defined in the database that can connect to and access objects.
Oracle使用者是用串連資料庫和訪問資料庫物件的。(使用者是用來串連資料庫訪問資料庫)。
(二)什麼叫模式(schema):
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
模式是資料庫物件的集合。模式對象是資料庫資料的邏輯結構。
(把資料庫物件用模式分開成不同的邏輯結構)。
(三)使用者(user)與模式(schema)的區別:
Schemas and users help database administrators manage database security.
使用者是用來串連資料庫物件。而模式用是用建立管理對象的。模式跟使用者在oracle 是一對一的關係。
( 不過db2卻不同,db2 一個使用者可以對應多個模式,db2 使用者是系統,他首先必須獲得系統使用者才能成為資料庫使用者,也就是資料庫使用者就是系統使用者,只有模式才是資料庫類似使用者。有興趣可以去研究。這裡就不跑題了,這也是db2特有的)。
從定義中我們可以看出schema為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡麵包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。一個使用者一般對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema。這也就是我們在企業管理器的方案下看到schema名都為資料庫使用者名稱的原因。Oracle資料庫中不能新建立一個schema,要想建立一個schema,只能通過建立一個使用者的方法解決(Oracle中雖然有create schema語句,但是它並不是用來建立一個schema的),在建立一個使用者的同時為這個使用者建立一個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同,所有我們可以稱schema為user的別名,雖然這樣說並不準確,但是更容易理解一些。
一個使用者有一個預設的schema,其schema名就等於使用者名稱,當然一個使用者還可以使用其他的schema。如果我們訪問一個表時,沒有指明該表屬於哪一個schema中的,系統就會自動給我們在表上加上預設的sheman名。比如我們在訪問資料庫時,訪問scott使用者下的emp表,通過select * from emp; 其實,這sql語句的完整寫法為select * from scott.emp。在資料庫中一個對象的完整名稱為schema.object,而不屬user.object。類似如果我們在建立對象時不指定該對象的schema,在該對象的schema為使用者的預設schema。這就像一個使用者有一個預設的資料表空間,但是該使用者還可以使用其他的資料表空間,如果我們在建立對象時不指定資料表空間,則Object Storage Service在預設資料表空間中,要想讓Object Storage Service在其他資料表空間中,我們需要在建立對象時指定該對象的資料表空間。
【編輯精選】
查看oracle使用者權限
oracle對象許可權簡介
三種oracle賦權
教您如何在oracle中存圖片
oracle樹查詢的實現
0
頂 0
踩