热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

current_schema参数的用途

用户A包含表TBL,如果用户A将TBL的访问权限给用户B(grantselectanytabletoB),则在用户B中要想引用用户A的表,不使用同义词,则需要用select*fromA.TBL;之所以这里需要使用A.TBL的式,是因为TBL表属于用户A的schema,做个比喻,schema(译文方案)好比

用户A包含表TBL,如果用户A将TBL的访问权限给用户B(grant selectany table to B),则在用户B中要想引用用户A的表,不使用同义词,则需要用select * from A.TBL; 之所以这里需要使用A.TBL的式,是因为TBL表属于用户A的schema,做个比喻,schema(译文方案)好比

用户A包含表TBL,如果用户A将TBL的访问权限给用户B(grant select any table to B),则在用户B中要想引用用户A的表,不使用同义词,则需要用select * from A.TBL;

之所以这里需要使用A.TBL的格式,是因为TBL表属于用户A的schema,做个比喻,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.)”

从中可以总结几点

1. 一个schema由一个数据库用户拥有,并且具有和那个用户相同的名字。

2. schema对象是一种逻辑结构。

3. 表空间和schema之间没有关系。

4. 同一个schema中的对象可以存在于不同的表空间,一个表空间可以拥有多个schema的对象。

再借鉴一个比喻,schema好比一个房间,房间中有各种各样的对象,例如桌子、椅子,房间的主人就是user/owner,他默认拥有这个房间内所有对象的增搬拆权限,但同样只有他可以让另外一个人进入房间,这就是授权。

有点扯远了,上面说到用户B要引用用户A的表,不想使用“用户A.表”的形式,其实除了使用同义词外,还可以使用current_schema来改变当前用户使用的schema。

语法:alter session set current_schema=名称;

尽管当前模式转换了,但是否有读写权限取决于用户是否被授权了,换句话说,这个语句并不能决定改变了shcema,这个用户就有新的schema中对象的读写权限。

实验

1. 用户A授权用户B

grant select any table to B;

2. 修改用户A当前session的shcema为A

alter session set current_schema=A;

3. 查看当前session的schema

select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;

>A

show user

USER is "TEST_PRIV"

4. 查看A的TBL

select * from TBL;

一切OK。

5. 切换当前session的schema为sys

alter session set current_schema=sys;

select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;
>SYS

6. 查看dba_tables

select * from dba_tables;

ERROR at line 1:

ORA-00942: table or view does not exist

说明用户B无权访问SYS对象。

总结

其实之所以需要current_schema,主要是申请一些只读账户时,通常是用grant授予用户访问权限,但访问时如果没有同义词则需要是用“schema(/user).表”的方式,每次新建表都创建同义词的方法也行,但毕竟很是不方便,是用current_schema就很简单了。

Oracle提供了各种通用或细节的技术手段,目标还是为了方便用户的使用,因此我觉得当有个问题感觉用起来不爽的时候,可以找下是否有workround,作为一个好的软件,应该会在你想到之前就已经考虑了这个问题了:)


推荐阅读
  • 深入解析Nacos服务自动注册机制
    本文将探讨Nacos服务自动注册的具体实现方法,特别是如何通过Spring事件机制完成服务注册。通过对Nacos源码的详细分析,帮助读者理解其背后的原理。 ... [详细]
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文介绍如何在阿里云环境中利用 Docker 容器化技术部署一个简单的 Flask Web 应用,并确保其可通过互联网访问。内容涵盖 Python 代码编写、Dockerfile 配置、镜像构建及容器运行等步骤。 ... [详细]
  • 深入理解Dockerfile及其作用
    Dockerfile是一种文本格式的配置文件,用于定义构建Docker镜像所需的步骤。通过使用`docker build`命令,用户可以将Dockerfile中的一系列指令转换成一个可执行的Docker镜像。 ... [详细]
  • 2017年软件开发领域的七大变革
    随着技术的不断进步,2017年对软件开发人员而言将充满挑战与机遇。本文探讨了开发人员需要适应的七个关键变化,包括人工智能、聊天机器人、容器技术、应用程序版本控制、云测试环境、大众开发者崛起以及系统管理的云迁移。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 将字符串中的嵌套列表转换回嵌套列表 ... [详细]
  • 本文将探讨如何在 Struts2 中使用 ActionContext 和 ServletActionContext 来获取请求参数和会话信息,同时解释它们的内部机制和最佳实践。 ... [详细]
author-avatar
kshen24
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有