`
tylgl
  • 浏览: 56802 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

user和schema的区别:

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

--下面的话是puber OoNiceDream 发上来的一段非常经典形象的比喻。

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名字>。


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>
分享到:
评论

相关推荐

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

    Oracle数据库中,用户(User)和模式(Schema)是两个紧密相关却又鲜明不同的概念。用户是指拥有数据库权限和资源的实体,而模式则是指一组数据库对象的集合,包括表、视图、索引、同义词等等。 首先,从官方文档中...

    Laravel开发-schemabuilder

    在Laravel框架中,`SchemaBuilder`是一个强大的工具,它允许开发者轻松地操作数据库表的结构,包括创建、修改和删除表。`SchemaBuilder`是Laravel Eloquent ORM(对象关系映射)的一部分,提供了简洁的PHP API来处理...

    Laravel开发-laravel-schema

    在Laravel框架中,`laravel-schema`是一个关键组件,主要负责数据库的迁移和构建。这个组件是Laravel ORM(对象关系映射)Eloquent的一部分,使得开发者能够以一种更加优雅和简洁的方式来处理数据库操作。下面我们将...

    Laravel开发-schema-build

    在Laravel框架中,`Schema Builder`是用于创建和管理数据库表结构的强大工具。它提供了一种简洁的、面向对象的方式来构建和修改数据库模式。在本篇内容中,我们将深入探讨`Schema Build`的使用方法,以及如何将其...

    Java bean转换为Json Schema

    Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...

    JSON-Schema定义规范

    - **描述现有数据格式**:JSON Schema允许开发者明确指定JSON文档中数据的格式和结构。 - **人类和机器可读的文档**:JSON Schema文档既可以直接阅读理解,也便于程序解析。 - **完整的结构验证**:JSON Schema支持...

    数据库中的Schema和Database的区别

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

    DB2 Schema操作总结

    这是因为Schema的创建直接影响到数据库结构的安全性和完整性,因此系统限制了只有具有足够权限的用户才能执行此类操作。 #### SQL代码示例 显式创建Schema的基本语法如下所示: ```sql CREATE SCHEMA &lt;name&gt; ...

    前端开源库-js-schema

    var userSchema = Schema({ name: String, age: Number, email: String.match(/^.+@.+\..+$/) }); // 验证数据 var user = {name: 'Alice', age: 25, email: 'alice@example.com'}; try { userSchema.validate...

    Laravel开发-laravel-schema .zip

    `laravel-schema`允许开发者轻松地创建、修改和管理数据库表结构。Laravel是一个优雅且强大的PHP web应用框架,它为开发者提供了丰富的工具来简化Web应用的开发过程。 1. **Database Connections** Laravel支持...

    json-schema-to:JSON-Schema To ≤GraphQL|Protobuf|Code≥.:trade_mark:

    JSON-Schema、GraphQL 和 Protobuf 是从 YAML 定义生成的,例如 id : User service : calls : - set : updatePassword resp : User input : UpdatePasswordParams params : UpdatePasswordRequest ...

    scim-kit:适用于Ruby的SCIM 2.0 SDK

    Scim :: Kit Scim :: Kit是一个旨在简化SCIM Schema的生成和使用的库。 安装将此行添加到您的应用程序的Gemfile中: gem 'scim-kit' 然后执行: $ bundle或将其自己安装为: $ gem install scim-kit用法def user_...

    oracle中schema指的是什么意思

    在Oracle数据库中,Schema是一个非常重要的概念,它代表了数据库对象的集合,这些对象包括但不限于表格、视图、序列、存储过程、同义词、索引、簇和数据库链接等。Schema是逻辑结构,直接与数据库的数据相关,帮助...

    graphql-guard:GraphQL的简单授权gem

    图形保护器 此gem为提供了字段级授权。 内容 用法 定义一个GraphQL模式: ... where ( user_id : user_id ) end end # Define a schema class Schema &lt; GraphQL :: Schema use GraphQL :: Execution :: Int

    MySQL中information_schema是什么

    通过查询`information_schema`,用户可以方便地获取到关于数据库对象的各种属性和状态信息,这对于开发人员和DBA来说非常有用。 #### 二、information_schema的作用 1. **权限管理**:`information_schema`提供了...

    Python库 | marshmallow-2.2.1-py2.py3-none-any.whl

    例如,如果我们有一个User类,我们可以创建一个UserSchema如下: ```python from marshmallow import Schema, fields class User: def __init__(self, name, email): self.name = name self.email = email ...

    自定义schema使用

    在IT行业中,自定义Schema的使用是一个非常关键的技能,特别是在大数据处理、消息队列(MQ)和数据集成等领域。本文将围绕“自定义schema使用”这一主题,结合标签“源码”和“工具”,深入探讨如何在实际项目中进行...

    数据库 schema含义 .doc

    在 SQL Server2000 中,由于架构的原因,User 和 Schema 总有一层隐含的关系,让我们很少意识到其实 User 和 Schema 是两种完全不同的概念。不过在 SQL Server2005 中这种架构被打破了,User 和 Schema 也被分开了。...

    PyPI 官网下载 | marrow.schema-1.0.0.tar.gz

    在这个例子中,我们定义了一个UserSchema,然后尝试用一个包含字符串年龄的字典去验证它,这将导致一个`ValueError`,因为年龄应该是一个整数。 **总结** `marrow.schema-1.0.0.tar.gz` 包含的`marrow.schema` 库...

    jsonschema在开发及测试中的应用.doc

    例如,假设有一个 API 需要接收包含 `city`(字符串)、`number`(数字)和 `user`(对象,包含 `name` 和 `age` 两个字段)的数据。JSON Schema 可以定义这样的数据模型,清晰地规定每个字段的类型和结构。 4. **...

Global site tag (gtag.js) - Google Analytics