Oracle User和Schema的区别

时间:2021-06-13 23:01:29

Oracle User和Schema的区别(原创)

 

概述

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。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。

    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 | TOracle User和Schema的区别

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。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
 

【编辑推荐】

查看oracle用户权限

oracle对象权限简介

三种oracle赋权

教您如何在oracle中存图片

oracle树查询的实现



0 
0