前言:
user是控制权限的,而schema则是一个容器,非所有者如果需要访问这个容器下的对象就需要在对象前面写上schema(owner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前session的schema从而在访问对象时省去schema(owner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。
深入理解user和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名字>。
--实例
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
分享到:
相关推荐
Oracle数据库中,用户(User)和模式(Schema)是两个紧密相关却又鲜明不同的概念。用户是指拥有数据库权限和资源的实体,而模式则是指一组数据库对象的集合,包括表、视图、索引、同义词等等。 首先,从官方文档中...
在Oracle数据库中,Schema是一个非常重要的概念,它代表了数据库对象的集合,这些对象包括但不限于表格、视图、...理解Schema的概念对于管理和维护大型Oracle数据库至关重要,因为它有助于确保数据的安全性和隔离性。
### Oracle数据库巡检报告知识点...以上内容涵盖了Oracle数据库巡检报告中的主要检查项,通过对这些关键指标的定期监控与维护,可以有效预防和解决数据库运行过程中可能出现的各种问题,保障业务系统的稳定性和可靠性。
通过研究和实践这些脚本,你可以深入理解Oracle数据库的核心概念,例如SQL语言(包括DDL(数据定义语言)和DML(数据操纵语言))、数据库设计原则、安全性管理和性能优化。同时,还可以了解到如何备份和恢复数据,...
本文将详细讲解如何利用SpringBoot整合Oracle数据库实现双数据源的配置和使用,帮助开发者构建可扩展、高可用的应用系统。 首先,我们需要理解"双数据源"的概念。双数据源意味着应用程序可以同时访问两个不同的...
Oracle数据库中的对象集合Schema是数据库管理系统中的核心概念之一,它在数据库设计和管理中起着至关重要的作用。Schema可以理解为一个命名空间...深入理解和掌握这些概念,对于有效地使用和管理Oracle数据库至关重要。
### SSH框架连接Oracle数据库的关键配置知识点 在基于Java 2 Platform, Enterprise Edition (J2EE) 的Web开发中,SSH(Struts + Spring + Hibernate)框架是常用的开发组合之一。SSH框架结合了Struts用于MVC(Model...
Oracle数据库是一种高度复杂的数据库管理系统,主要用于企业级数据管理和处理。与其他数据库系统不同,Oracle数据库中的“数据库”这一概念实际上指的是所有数据文件、控制文件、联机重做日志文件以及参数文件等物理...
为了实现这一点,我们需要在现有的一台服务器上安装Oracle数据库,并创建一个专门用于vCenter的数据表空间和用户。此外,vCenter Server本身也将部署在另一台独立的服务器上。 #### 二、准备工作 - **vCenter 6.0...
本压缩包包含了一些Oracle示例数据库的相关脚本,主要用于学习和理解Oracle数据库的使用。 1. `ot_create_user.sql`: 这个文件很可能是创建一个名为"ot"用户的SQL脚本。在Oracle中,用户是数据库的访问者,每个用户...
Oracle HR Schema是一个经典的示例数据库,它主要用于演示和学习Oracle数据库在人力资源管理...通过搭建和使用这个schema,我们可以深入学习Oracle数据库的管理、查询以及性能调优等多个方面,提升我们的数据库技能。
例如,使用以下命令可以将 smc 和 useradmin 两个 schema 的数据导出到 dump 文件中: expdp smc_yanshi/123qwe@orcl217 schemas=smc_yanshi dumpfile=smc.dmp DIRECTORY=data logfile=smc.log expdp useradmin_...
$ORACLE_HOME/demo/schema/human_resources/目录下。 2、在该目录下执行:sqlplus / as sysdba; 3、执行SQL>@hr_main.sql创建HR数据库。 1、使用管理者system身份登录,登陆成功后输入 alter user hr identified by...
本文将深入探讨Oracle数据库的审计机制,以及如何有效地获取和分析这些审计信息。 一、Oracle数据库审计基础 Oracle数据库的审计功能主要通过两种方式实现:系统审计(System Auditing)和Fine-Grained Auditing...
Oracle数据库是企业级广泛使用的数据库管理系统,为了确保数据的安全性和可恢复性,定期备份是非常重要的。在Windows环境中,我们可以利用批处理(BAT)文件来自动化这个过程,这大大提高了工作效率。"Oracle数据库...
### 数据库Oracle命令汇总与连接方法 #### 一、Oracle命令汇总 在Oracle数据库管理过程中,经常需要用到各种命令来执行日常任务,例如查询、更新、...这些知识点对于Oracle数据库的日常管理和维护具有重要的意义。
5. **使用schema和owner**:Oracle数据库中,对象属于特定的schema或owner,所以完整的对象引用可能是`schema.object_name`。 6. **避免使用数字开头**:在Oracle中,以数字开头的名称是不允许的。 7. **同样提倡...
### Oracle数据库日常维护手册知识点概览 #### 一、检查数据库基本状况 ##### 1.1 检查Oracle实例状态 - **SQL命令**: 使用`SELECT instance_name, host_name, startup_time, status, database_status FROM v$...
Oracle的用户表列信息可以通过`user_tab_columns`查询,而MySQL则依赖于`information_schema.columns`来获取。在数据迁移过程中,确保字段类型的正确映射至关重要,因为不匹配的类型可能导致数据丢失或错误。 其次...