Oracle数据库访问其他用户下的表,不加表所属的用户名的实现方法

简介: Oracle数据库访问其他用户下的表,不加表所属的用户名的实现方法
+关注继续查看

一. 问题:


如何实现在Oracle数据库中访问其他用户的表时不需加表所属的用户名


二. 举例:


Oracle里面的用户A,要访问用户B的表需要带用户B的前缀,如访问用户B的 TEST表,需要这样访问 select * from B.TEST;现在就是问如何才能无需添加用户名的前缀。


三. 原因:


  1. 方便访问常用表
  2. 隐藏表的用户


四. 解决方案:


1. 创建同义词


语法:

CREATE [PUBLIC] SYNONYM synonym_name FOR [schema.] object[@db_link];````
根据举例进行延伸演示:
   (1)登录sysdba为用户B授予创建同义词的操作权限:
      sqlplus /nolog 
      conn /as sysdba; 
      grant create synonym to B;       
   (2)登录B用户为A授予访问特定表TEST的权限:
      //注意:这是A用户能够使用同义词访问B的TEST表的前提
      grant select on TEST to A;
      
      //撤销的方式:
      revoke select on TEST from A;
   (3)创建同义词
      create synonym SY_TEST for B.TEST;
   (4)登录用户A进行测试.
#####2.创建视图
      create view VW_TEST select * from B.TEST;
#####3.修改current_schema参数
用于切换当前会话的架构(schema)。在进行对象名解析时,如果对象名前没有限定架构名,oracle 会自动在此架构下查询匹配的对象。
例如,当 scott 用户执行```` select * from emps; ````语句时,oracle 默认会查询 scott 架构下的 emps 表;但是,如果```` alter session set current_schema=xx; ````更改了会话的当前架构,执行此语句时 oracle 会查询 xx 架构下的 emps 表。

登录用户A时,临时修改current_schema参数:    
    SQL> alter session set current_schema=B;
    Session altered.
    SQL> show user;
    USER is "A"
    SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;
    CURRENT_SCHEMA                                                                  
    --------------------------------------------------------------------------------
    B                                                                        
    SQL> 
    SQL> spool off;

这种方式只是适用于当前一次会话,一旦会话关闭,下次就不行了.所以此种方式一次可行,但是通用不行.


相关文章
|
10月前
|
Oracle Java 关系型数据库
oracle实现主键自增长及自动生成策略
oracle实现主键自增长及自动生成策略
363 0
|
11月前
|
存储 SQL Oracle
Oracle使用expdp/impdp实现全库导入导出的整体流程
Oracle的全库导入,首先一点必须先创建数据库,创建了数据库,才能往该数据库导入所有数据。相对来说,使用Oracle进行数据导入导出还很有些“麻烦”的,大多数资料上来就是......
3798 0
Oracle使用expdp/impdp实现全库导入导出的整体流程
|
SQL Oracle 关系型数据库
SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase
随着去“IOE”化的潮流,近些年来,许多与国家相关的项目不约而同到地往”国产化“方向靠拢,不可避免地,一些项目可能需要进行数据库迁移。
606 0
SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase
|
存储 Oracle 关系型数据库
Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步
Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步
|
存储 SQL Oracle
跨Oracle数据库实现表级别的实时同步
跨Oracle数据库实现表级别的实时同步
|
存储 设计模式 Oracle
Oracle跨数据库实现定时同步指定表中的数据
Oracle跨数据库实现定时同步指定表中的数据
|
SQL 开发框架 Java
Java+Oracle实现事务——JDBC事务
J2EE支持JDBC事务、JTA事务和容器事务事务,这里说一下如何实现JDBC事务。 JDBC事务是由Connection对象所控制的,它提供了两种事务模式:自动提交和手动提交,默认是自动提交。
|
Oracle 关系型数据库 数据库
关于PostgreSQL数据库兼容Oracle数据库闪回查询的实现方案
注:关于在PostgreSQL上面实现Oracle数据库的闪回功能(闪回查询 闪回表 闪回删除…)的这个想法已经有很长时间了,但是鉴于本人的能力 精力和身体条件 迟迟没有完成。期间也有很多的小伙伴跟我一起研究过这个功能,但是最终都因为各种各样的问题 没有做下去。Oracle数据库闪回功能跨越版本较大,功能也比较强大 在PostgreSQL数据库上实现,需要对数据库内核有很深入的理解 两大数据库不同的底层原理也终将影响各自的实现策略,PostgreSQL标记删除就地插入的特点和基于事务快照行可见性的特性是我们可以开发PostgreSQL闪回查询的大前提。本文主要介绍 实现闪回查询的 一种实现方案
267 0
推荐文章
更多