oracle不同用户间访问表不添加用户名(模式)前缀

摘要:
公共同义词用于所有用户,而私有同义词仅用于对象所有者或授予权限的帐户。在本地数据库中,同义词可以表示数据对象,例如表、视图、序列、程序、函数或包,或者通过链接表示另一个数据库的对象。按如下方式创建同义词:Create[PPUBLIC]SYNONYMsynonym_ nameFOR[schema.]object[@db_link];例子:CREATEPUBLICSYNONYMpoliciesFORpoladm.policies@prod ; CREATESYNONYMplan_tableFORsystem.plan_table;1.私有同义词只能由当前用户访问。

默认的情况下,oracle里面的用户A,要访问用户B的表需要带用户B的前缀,如访问用户B的 user表,
需要这样访问 select * from B.user;如果想要不添加用户前缀,
需要这样处理:(user01 就是A用户)

1.用视图  create view user select * from B.user;

2.使用同义词:

grant CREATE SYNONYM to user01;   --使用DBA或者有权限的用户授权
create synonym user for B.user;


备注:前提都是需要使用B用户对A用户进行表访问的授权
grant select on user to user01;


发现百度后很多方法都是这个
但是这和创建一个视图有什么区别,没明白

后来想到这是(有两种方法:视图或同义词)

备注:随笔中内容来源于网上资料整理,仅供参考。

附:

如把user1.table1在user2中建一个同义词table1
create synonym table1 for user1.table1;
这样当你在user2中查select * from table1时就相当于查select * from user1.table1;

例如:
在oracle中对用户的管理是使用权限的方式来管理的,也就是说,
如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,
我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,
所以这就是比较麻烦的,遇到这种情况,我们该怎么办呢?
创建个同义词吧!这样我们就可以直接使用同义词来使用表了。
对另一个数据对象而言同义词是一个别名。
public同义词是针对所有用户的,
相对而言private同义词则只针对对象拥有者或被授予权限的账户。
在本地数据库中同义词可以表示表、视图、序列、程序、函数或包等数据对象,也可以通过链接表示另一个数据库的对象。

创建同义词语法如下:

CREATE [PUBLIC] SYNONYM synonym_name FOR [schema.] object[@db_link];
例:

CREATE PUBLIC SYNONYM policies FOR poladm.policies@prod;

CREATE SYNONYM plan_table FOR system.plan_table;



1、私有同义词    只能被当前用户访问。
2、公有同义词    可被所有的数据库用户访问。

创建同义词语法:
create [or replace] [public]
synonym 同义词名称
for [用户名.]对象名;
注释:[]中表示可写、或不写;
[or replace]表示如果已经有了你要创建的同义词就取代/替换原有的同义词;
[public]表示是否把同义词公有


-------------------------

假设oracle有以下两个用户: admin , visitor
我们在admin下建立了 testtable 这个表,并且对visitor用户赋权
然后我们用visitor登陆 : 查询这个表的时候我们一定需要这样写
select * from admin.testtable
如果直接写 select * from testtable oracle会报错说表不存在
但是我们可以在visitor里建立[私有同义词] 让 testtable = admin.testtable
这样在visitor下就可以直接输入 select * from testtable进行查询

但是如果用户很多的情况下会觉得很麻烦,因为每个用户都需要加[私有同义词] testtable=admin.testtable

所以就出现了 [公有同义词]
直接在admin用户下建立公有同义词 testtable = testtable

这样做好后,所有的用户都可以直接使用
select * from testtable 进行访问而并不需要加前缀,也不用再加[私有同义词]了

-------------------------


解决方案:

创建公有同义词

create public synonym table_name for user.table_name;
删除公有同义词   drop public synonym test1


创建私有同义词
create synonym B.synonym_name for A.object_name;

前提是A用户要有create any synonym的权限

免责声明:文章转载自《oracle不同用户间访问表不添加用户名(模式)前缀》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[原][译][physX]phsyX3.3.4官方文档物理引擎基本概念和例子介绍canvas画图标签的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于使用SqlSugar插入数据异常解决方案

 项目的解决方案中引用的有mysqlsugar的数据库操作库,在使用插入数据过程中一些特殊的生僻字或表情符号总会提示: Incorrect string value: 'xF0x9F...' for column 'name' at row 1 这是由于UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而MySQL的ut...

使用HQL查询

  HQL是Hibernate Query Language的缩写,语法很想SQL,但是HQL是一种面向对象的查询语言。SQL的操作对象是数据列、表等数据库对象,而HQL操作的是类、实例、属性。   HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按如下步骤进行:   1.获取Hibernate Session对象   2....

利用sys.sysprocesses检查SqlServer的阻塞和死锁

Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 视图中主要的字段: 1. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程ID 3. Blocked:正在阻塞求情的会话 ID。如果此列为 Null,则标识请求未被阻塞 4. Waittype:当前连接的等待资源编...

耗时又繁重的SQL诊断优化,以后就都交给数据库自治服务DAS吧!

在我们业务系统中,数据库越来越扮演着举足轻重的角色。 和其它公司一样,在阿里巴巴业务场景下,大部分业务跟数据库有着非常紧密的关系,数据库一个微小的抖动都有可能对业务造成非常大的影响, 如何让数据库更稳定,得到持续优化一直都是非常重要的诉求。 数据库环境下的业务优化,通常会提到三个层面:1)应用层面优化:应用代码逻辑优化,以更高效的方式处理数据;2)实例层面...

JIRA数据库切换(HSQL Database到MySQL)

没试过的版本,但是看着靠谱: 注:如果你之前配置过hsql版本,这次修改mysql数据操作会导致配置数据丢失,所以请注意备份 一、 创建名为jiradb的mysql数据,编码格式为utf-8 二、修改jira配置文件confserver.xml的数据库配置部分如下 <Resource name="jdbc/JiraDS" auth="Contain...

oracle中去掉回车换行空格的方法详解

函数: 1.translate语法:TRANSLATE(char, from, to)用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。            若from比to字符串长,那么在from中比to中多出的字符将会被删除。            三个参数中有一个是空,返回值也将是空值。 举例:SQL> select...