`

模式Schema

阅读更多
schema是用户和用户所拥有的对象的集合,在OEM中创建一个用户,此时实际上已经有了一个同名的schema,但是如果该用户没有对象,则在oem中看不到这个schema。一旦创建了用户的对象,比如表,那么oem中就可以看到了。

user是控制权限的,而schema则是一个容器,非所有者如果需要访问这个容器下的对象就需要在对象前面写上schema(owner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前session的schema从而在访问对象时省去schema(owner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。

user即Oracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;
而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的“所在地”,并不包括对他们的权限控制。好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。你可以也是一个房子的主人(user),拥有自己的房子(schema)。可以通过alter session的方式进入别人的房子。这个时候,你可以看到别人房子里的家具(desc)。如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把其他schema名字放入代码中,就可以首先使用alter session set 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了”


SQL> connect /as sysdba
已连接。

SQL> revoke dba from xys,test;
revoke dba from xys,test
*
第 1 行出现错误:
ORA-01951: ROLE 'DBA' 未授予 'XYS'


SQL> revoke dba from test;

撤销成功。

SQL> connect xys/manager
已连接。
SQL> select table_name from user_tables;

未选定行

SQL> create table t(id int) ;

表已创建。

SQL> insert into t values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> connect test/test
已连接。
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
TT
SYS_TEMP_FBT

SQL> desc t
名称 是否为空? 类型
--------------- -------- -------------

ID NUMBER(38)

SQL> select * from t;

未选定行

SQL> show user
USER 为 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> alter session set current_schema=xys;

会话已更改。

SQL> show user
USER 为 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select * from t;
select * from t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> alter session set current_schema=TEST;

会话已更改。

SQL> select * from t;

未选定行

SQL> connect xys/manager
已连接。
SQL> grant select on t to test;

授权成功。

SQL> connect test/test
已连接。
SQL> select * from xys.t;

ID
----------
1

SQL> alter session set current_schema=xys;

会话已更改。

SQL> select * from t;

ID
----------
1

SQL>

分享到:
评论

相关推荐

    PostgreSQL教程(二):模式Schema详解

    本教程将深入探讨模式Schema的详细知识。 首先,一个数据库可以包含一个或多个模式,每个模式都有自己的命名空间,其中可以包含表、数据类型、函数、操作符等数据库对象。例如,schema1和myschema是两个不同的模式...

    达梦7,删除某一模式(schema)下的全部表

    达梦7,删除某一模式(schema)下的全部表。 使用sql脚本执行。

    Python库 | json_schema_matchers-0.0.3-py3-none-any.whl

    `json_schema_matchers` 是一个Python库,专为验证JSON数据是否符合预定义的JSON模式而设计。在软件开发中,特别是在API接口开发、数据验证和测试领域,这种库非常有用。JSON(JavaScript Object Notation)是一种轻...

    Python库 | schema_validator-0.2.0-py3-none-any.whl

    `schema_validator`库的主要功能是验证数据结构是否符合预定义的模式或规范。在处理JSON或其他结构化数据时,这样的库非常有用。它可以帮助开发者确保输入的数据是有效且符合预期的,防止因数据不正确而导致的程序...

    JSON Schema 规范(中文版).pdf

    在学习 JSON Schema 时,需要理解什么是模式, JSON Schema 的基本类型,如何使用 JSON Schema 等。 什么是模式? 模式(Schema)可以理解为一种模式或者规则,用于定义 JSON 数据结构的结构和约束。 JSON Schema ...

    理解XML Schema XML Schema进阶

    XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...

    JSON Schema 生成库——json-schema-inferrer(java版).rar

    4. **模式组合**:JSON Schema支持多种模式组合,如`allOf`、`anyOf`、`oneOf`和`not`,`json-schema-inferrer`能够处理这些复杂的组合模式,从多个JSON实例中提取共同的模式或者识别出不同的模式。 5. **自定义...

    Java bean转换为Json Schema

    在Java中,将Bean转换为Json Schema可以帮助我们在服务器端验证客户端发送的数据是否符合预设的模式,避免因数据格式错误导致的问题。这种转换通常通过一些库或工具来实现,例如`json-schema-generator`或`org.json...

    JSON Schema验证规范-中文版

    JSON Schema的一个重要应用就是实例验证,即检查某个JSON文档是否符合预定义的模式。 #### 二、公约与术语 在理解JSON Schema验证规范之前,了解一些基本术语和约定至关重要: - **JSON Schema**:一种使用JSON来...

    JSON-Schema定义规范

    - **Properties**:针对对象类型的JSON Schema,定义了对象中各个属性的名称及其对应的模式。 - **Required**:指定哪些属性是必须存在的。 下面将详细介绍JSON Schema中的不同类型及其约束条件。 #### JSON ...

    json转换jsonschema

    3. **模式(Pattern)**:允许设置正则表达式来验证字符串的格式。 4. **最大值/最小值(Maximum/Minimum)**:对于数值类型,可以设定值的范围。 5. **最大长度/最小长度(MaxLength/MinLength)**:对于字符串,...

    json-schema-2.2.6

    6. **模式组合(Schema Composition)**:通过"allOf"、"anyOf"、"oneOf"和"not"等关键字,可以组合多个模式,实现更复杂的验证逻辑。 7. **默认值(Default)**:可以为属性提供默认值,当JSON数据中没有该属性时...

    XMLSchema经典例题

    6. **模式和模式组合**:XML Schema支持模式(schema)的组合,可以将多个小的模式组合成一个大的模式,便于管理和重用。例如,你可以创建一个通用的`contactInfo`模式,然后在其他多个模式中引用它。 7. **重复组*...

    Schema Compare 使用手册

    在数据库管理中,Schema Compare是一个至关重要的工具,用于比较和同步不同数据库之间的模式差异。本文将详细介绍PLSQL Developer中的Schema Compare功能,帮助用户更有效地管理和维护数据库结构。 一、Schema ...

    XML Schema初窥

    模式文档是XML Schema的实现,它定义了一组规则来验证XML文档的结构。模式文档通常以`.xsd`为扩展名,根元素是`&lt;xs:schema&gt;`,并需要声明`http://www.w3.org/2001/XMLSchema`名称空间。名称空间的使用使得XML Schema...

    DB2 Schema操作总结

    标题与描述均提及了“DB2 Schema操作总结”,这表明文章将聚焦于IBM DB2数据库管理系统中的模式(Schema)管理操作。以下是对标题、描述、标签以及部分内容中提及的关键知识点的详细阐述: ### 显式建立Schema 在...

    PyPI 官网下载 | shexstatements-0.7.tar.gz

    它支持两种模式:模式约束(Schema Constraints)和模式组合(Schema Composition)。 **Python库的使用** 在Python中,`shexstatements`库可能提供了如下功能: 1. **解析ShEx语法**:库可能包含解析器,用于将...

    XML基础实例 Schema

    8. **第二章 Schema**:这个文件名可能指的是学习XML Schema的一个章节,该章节可能详细讲解了Schema的某一部分,如数据类型的扩展、限制、枚举值、模式匹配等。 总之,XML基础实例和Schema是XML编程中的核心概念。...

Global site tag (gtag.js) - Google Analytics