`

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

0
0
分享到:
评论

相关推荐

    oracle数据库体系结构之一【user和schema】

    希望能够帮助到你。

    数据库中的Schema和Database的区别

    在mysql中创建一个Schema和创建一个...  在sqlserver2000中,由于架构的原因,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,不过在sqlserver2005中这种架构被打破了,use

    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. A user is a name defined in the database that ...

    最完整的Toad For Oracle使用手册

    Configure User Lists 188 Session Information 189 Change Password 190 Commit & Rollback 190 Connect and Disconnect 191 DBMS_Flashback 191 Diagnosing Problems 193 View Extents 193 Identify Space ...

    Oracle Security

    The User Interface: User Versus Schema Objects Tables Table Triggers Views Stored Programs Synonyms Privileges Roles Profiles Chapter 4 The Oracle Data Dictionary Creating and Maintaining ...

    最全的oracle常用命令大全.txt

    一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup SVRMGR&gt;quit b、关闭...

    Oracle 11g自带人事管理示例数据库(安装使用有详细说明)

    $ORACLE_HOME/demo/schema/human_resources/目录下。 2、在该目录下执行:sqlplus / as sysdba; 3、执行SQL&gt;@hr_main.sql创建HR数据库。 1、使用管理者system身份登录,登陆成功后输入 alter user hr identified by...

    一个oracle客户端(oracle sql handler)

    运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名,则显示表或视图的脚本/语句,即表或视图是如何创建的(包括索引及约束条件) o 支持 PL/SQL 语句(包括 Procedure、 Function、Trigger...

    两天成为Oracle_DBA(PDF版)

    真的Oracle 10g的官方速成培训教材 英语原版教材(英文较简单) 主要内容 Chapter 1, "Introduction" This chapter contains an brief overview of Oracle database administration. Chapter 2, "Installing ...

    Oracle.10g.认证辅导资料

    Database Storage and Schema Objects Chapter 4 Oracle Net Services Chapter 5 Oracle Shared Server Chapter 6 User Administration and Security Chapter 7 Managing Data With SQL, PL/SQL, and Utilities ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     删除HKEY_CURRENT_USER/SOFTWARE/Microsoft/windows/CurrentVersion/Explorer/MenuOrder/Start Menu/Programs中所有以oracle 开头的键。  删除HKDY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI中除Microsoft ...

    震撼推出超方便实用的Oracle开发工具 - Oracle SQL Handler,双语界面,智能SQL编辑器,免装Oracle客户端,能运行于Windows, 双语界面

    运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名或物化视图(快照),则显示 其生成的脚本/语句 支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_...

    Oracle 当前用户下所有表的记录总数

    代码如下: begin dbms_utility.analyze_schema(user,’COMPUTE’); end; select t.table_name,t.num_rows,t.blocks,t.empty_blocks from user_tables t 您可能感兴趣的文章:shell脚本操作oracle删除表空间、创建...

    oracle安装及备份

    TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同) ROWS=Y INDEXES=Y GRANTS=Y CONSTRAINTS=Y BUFFER=409600 file==/backup/ctgpc_20030623.dmp log==/backup/...

    Oracle开发工具 - Oracle SQL Handler(功能强大,超方便好用, 免装客户端, Windows / Linux)

    运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名或物化视图 (快照),则显示其生成的脚本/语句 支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_...

    Oracle8i_9i数据库基础

    §1.3.1 SQL和SQL*PLUS的差别 25 §1.3.2 PL/SQL语言 27 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介 32 §1.5.1 登录到SQL*PLUS 32 §...

    Oracle 删除用户和表空间详细介绍

    Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下 对于单个user和tablespace 来说, 可以使用如下命令来完成。  步骤一: 删除user drop user ×× cascade 说明: 删除了user,只是删除了该...

    ORACLE OSB开发指南

    ORACLE OSB开发指南,英文版。 目录: Part I IDE Help for Oracle Service Bus 1 Introduction to Oracle Service Bus 2 Tasks Working with Projects, Folders, Resources, and Configurations .....................

    oracle示例数据库OT.zip

    文件:ot_create_user.sql - 用于创建OT用户和授予权限。文件:ot_schema.sql - 用于创建数据库对象,如表,约束等文件:ot_data.sql - 用于将数据加载到表中。文件:ot_drop.sql - 用于删除示例数据库中的所有对象...

    Oracle Essbase 11 Development Cookbook

    Using Star Analytics to build your star schema from existing Essbase cubes Up Chapter 2: Using Essbase Studio Introduction Creating TBC sample database and connecting to the data source Adding user-...

Global site tag (gtag.js) - Google Analytics