我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle中User和Schema的区别和联系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle中User和Schema的区别和联系


今天在阅读Oracle官方文档的时候,读到schema的基本概念,这就让我产生了一个疑问:user和schema两者之间到底有什么区别?为了更深层次的理解二者之间的区别和联系,以下是官方文档中关于user和schema的解释: 

            “A schema is a collection of database objects. A schema is owned by a database user and has the same name as that user. Schema objects are the logical structures that directly refer to the database’s data. Schema objects include structures like tables, views, and indexes.(There is no relationship between a tablespace and a schema. Objects in the same schema can be in different tablespaces, and a tablespace can hold objects from different schemas.)”


“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和user的关系用一个形象的比喻阐述得非常透彻,引用如下: 
  “user即Oracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的“所在地”,并不包括对他们的权限控制。

Oracle中的schema就是指一个用户下所有对象的集合,schema本身不能理解成一个对象,oracle并没有提供创建schema的语法,schema也并不是在创建user时就创建,而是在该用户下创建第一个对象之后schema也随之产生,只要user下存在对象,schema就一定存在,user下如果不存在对象,schema也不存在;如果创建一个新用户,该用户下如果没有对象则schema不存在,如果创建一个对象则和用户同名的schema也随之产生。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。

在数据库中 一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。
      好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。你可以也是一个房子的主人(user),拥有自己的房子(schema).可以通过alter session的方式进入别人的房子。如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把其他 schema名字放入代码中,就可以首先使用alter session set schema=<其他schema名字>。” 


  这段文字说得非常生动,把user和schema的区别阐述得很透彻,下面通过具体的例子来加深对user和schema两者区别的认识: 


第一步,以sys用户登陆SQL并建立普通用户wjqseiang 
  [oracle@seiang11g ~]$ sqlplus / as sysdba 
  SYS@seiang11g> create user wjq identified by wjq; 
  User created. 

  SYS@seiang11g> create user seiang identified by seiang; 
  User created. 

第二步,赋予一些基本的权限给新建的用户wjqseiang 
  SYS@seiang11g> grant connect,create table,resource to wjq,seiang; 
  Grant succeeded. 

第三步,以wjq用户登陆,创建一张表并插入数据: 
  SYS@seiang11g> conn wjq/wjq 
  Connected. 

  WJQ@seiang11g> create table t (id int); 
  Table created. 

  WJQ@seiang11g> insert into t values(1); 
  1 row created. 

  WJQ@seiang11g> commit; 
  Commit complete. 

第四步,以seiang用户登陆,看能否查询wjq用户所建表里面的数据: 
  SYS@seiang11g>conn seiang/seiang 
  Connected. 

  SEIANG@seiang11g> select table_name from user_tables; 
  no rows selected 

  SEIANG@seiang11g> show user; 
  USER is "SEIANG" 

  SEIANG@seiang11g> select * from wjq.t; 
  select * from wjq.t 
  * 
  ERROR at line 1: 
  ORA-00942: table or view does not exist 
  从以上结果可以看出,用户 seiang无法查看用户wjq所建表里面的内容,甚至被告知没有这张表。 

第五步,修改当前schemawjq,并继续查询: 
  SEIANG@seiang11g> alter session set current_schema=wjq; 
  Session altered. 

  SEIANG@seiang11g> show user; 
  USER is "SEIANG" 

  SEIANG@seiang11g> select * from wjq.t; 
  select * from wjq.t 
  * 
  ERROR at line 1: 
  ORA-00942: table or view does not exist 
  仍然不能查看。 

第六步,以wjq用户登陆,赋予seiang用户查看t表的权限: 
  SYS@seiang11g> conn wjq/wjq 
  Connected. 

  WJQ@seiang11g> grant select on t to seiang; 
  Grant succeeded. 

第七步,以seiang用户登陆,查看wjq用户的t表: 
  SYS@seiang11g> conn seiang/seiang 
  Connected. 

  SEIANG@seiang11g>select * from wjq.t; 
  ID 
  ---------- 
  1 

  更简单的,将当前schema更改为seiang,可以简化查询过程: 
  SEIANG@seiang11g> alter session set current_schema=wjq; 
  Session altered. 

  SEIANG@seiang11g> select * from t; 
  ID 
  ---------- 
  1 
  这个实验下来,对user和schema的区别和联系应该有了进一步的理解了。



作者:SEian.G(苦练七十二变,笑对八十一难)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle中User和Schema的区别和联系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle schema和database的区别是什么

Oracle Schema和Oracle Database是两个不同的概念。Oracle Database是一个完整的数据库系统,它是一个独立的实体,包含了数据的存储、管理、备份恢复、安全性等功能。它可以被看作是一个物理上存在的数据库实例。
oracle schema和database的区别是什么
2024-04-09

协程和线程的区别和联系

本篇内容介绍了“协程和线程的区别和联系”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!进程进程是什么进程是操作系统对一个正在运行的程序的一种抽
2023-06-15

java中volatile和synchronized的区别与联系

java中volatile和synchronized的区别与联系这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两
2023-05-31

c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。c语言是一种面向过程的语言,而c++是一种面向对象的语言。c++扩展了c语言的类型系统,引入了引用、函数重载和
c语言和c++的区别和联系
2024-03-14

SMTP 和 POP3 协议的区别和联系

SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol 3)是两种常用的电子邮件协议,用于发送和接收电子邮件。虽然它们都涉及到电子邮件的传输,但在功能和使用方式上有一些区别
2023-08-21

Centos和Redhat的区别与联系

CentOS的简介CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行版本。CentOS并不是全新的Linux发
2022-06-05

云服务器和数据库的区别和联系与区别

云服务器和数据库都是用来存储和处理数据的系统,但它们的区别是很大的。云服务器是一种虚拟服务器,它的功能是让客户机或者用户可以连接到服务器进行数据访问。而数据库则是一个存储着数据的系统,它的作用是用来管理和维护数据,以便于在需要的时候可以从这些数据中提取出有用的信息来支持业务。云服务器可以使用虚拟化技术来提高效率,例如使用云计算平台来减少硬件成本和管理负担。云服务器还可以提供更快的数据访问速度和
2023-10-26

Android中的URI和Uri类有什么区别和联系

本篇内容主要讲解“Android中的URI和Uri类有什么区别和联系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中的URI和Uri类有什么区别和联系”吧!一、URI与Uri大家可
2023-06-02

DNS和CDN有什么区别和联系

本篇内容主要讲解“DNS和CDN有什么区别和联系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“DNS和CDN有什么区别和联系”吧!现在互联网用户很多不能理解CDN和DNS之间的关系,他们之间到底
2023-06-04

TCP和UDP有何区别?联系?

  很多文章都说TCP协议可靠,UDP协议不可靠。为什么前者可靠,后者不可靠呢?既然UDP协议不可靠,为什么还要使用它呢?所谓的TCP协议是面向连接的协议,面向连接是什么?既然对TCP和UDP有诸多的不了解,那么我们就一起来学习吧。  1、面向连接的TCP  TCP(Transmission Control Proto
TCP和UDP有何区别?联系?
2024-04-18

云服务器和虚拟主机的区别和联系与区别

云服务器和虚拟主机是两个常用的网站托管平台,它们都提供了虚拟化技术来支持企业或个人将数据存储在公共云中。这两个平台都包括了服务器、存储、网络和其他资源,以提供灵活、安全和可靠的基础设施。云服务器提供了虚拟化的基础设施,允许企业或个人将服务器、存储和其他资源存储在其自身的资源池中,无需购买或租用其他资源。这样,企业或个人可以根据自身需求来配置和管理这些资源,提高了灵活性和效率。另一个区别是云计
2023-10-26

java中实例与对象的区别和联系

对象是抽象的说法,你可以把它看作一个符合它自身定义的所有实例的代表,而实例则是对象的现实体现。你可以说一个实例是一个对象,但你不能说一个对象是一个实例。因为定义对象时只是把自身的规则和逻辑定义好,实例可以通过输入不同的数据使得自己和其他实例不同。 java相
java中实例与对象的区别和联系
2018-12-10

详解pandas中Series()和DataFrame()的区别与联系

本文主要介绍了详解pandas中Series()和DataFrame()的区别与联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-11

编程热搜

目录