oracle symonym_Oracle的同义词(synonyms)

oracle的同义词总结:

从字面上理解就是别名的意思,和视图的功能类似。就是一种映射关系。

1.创建同义词语句:

create public synonym table_name for user.table_name;

其中第一个user_table和第二个user_table可以不一样。

此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;

当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

2.删除同义词:

drop public synonym table_name;

3.查看所有同义词:

select * from dba_synonyms

Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、函数、JAVA类、包等等,数据库管理员都可以根据实际情况为他们定义同义词。通过Oracle数据库同义词管理,可以给数据库管理员与应用程序开发人员带来不少惊喜。惊喜一:应用程序开发可以不管数据库的具体对象名。  在应用程序中,要不断的调用Oracle数据库的对象,如表、视图、对象等等。为此,在管理软件开发的过程中,若应用程序已经完成了某部分功能的开发。此时,数据库管理员若一定需要更改某个数据库对象的命名。那么,此时应用程序也需要调整。这在实际工作中,会很不方便。特别是有些应用程序如果提供了功能自定义平台的话,会非常的麻烦。如在一个ERP软件中,有报表自定义功能。在系统中,原来就有一张供应商产品明细表。但是,用户觉得这张报表信息不够齐全。用户希望能够显示出某个零件所对应的成品。此时,用户可以更改原有的数据库对象来完成这个自定义。但是,这往往不被建议这么做。因为若不小心修改错误,那么就很难再修改回来。所以自定义平台中,若需要对原有报表进行比较大的变更时,往往建议用户另外建立一个视图,来收集自己所需要的信息。若这么做的话,那么用户不仅需要定义数据库对象,而且还要重新调整前台应用程序的报表格式。显然这工作量有多大。

而现在有了同义词功能的话,这一切都会变得方便。因为前台应用程序可以不用作调整,而只需把数据库对象同义词进行重新定义即可。这既保障了前台应用程序的可恢复性;同时也降低了工作量。这就是Oracle数据库同义词给我们带来的第一个惊喜。惊喜二:避免应用程序直接访问数据库对象,提高数据库安全性。  在开发数据库应用程序的时候,应当普遍遵守的一个规则是尽量避免直接饮用数据库的表、视图、函数或者其他对象。因为这会在很大程度上破坏数据库的安全性。

如在前台应用程序中直接调用数据库对象,那么攻击者只需要对应用程序所引用的对象进行分析,就可以很容易的了解后台数据库的基本逻辑结构。这显然会为攻击者提供很大的便利。所以,为了保障数据库的安全,前台应用程序最好通过同义词来访问后台数据库。如此的话,攻击者就很难通过前台应用程序的调用,来分析后台数据库的对象,以及对象之间的关系。惊喜三:简化数据库对象的访问。  有时候,我们某个数据库对象的名字可能会很长,如AD_USER_ROLE_NAME_TRL。提示每次调用这个数据库对象的时候,都要输入这么长的对象名,肯定会让数据库管理员很头疼。但是,若名字定义的太短了呢,可读性就不好。其他一些数据库,只有牺牲可读性,把数据库对象的名字尽量缩短。

不过在Oracle数据库中,则可以不用这个烦恼。因为我们可以给这个数据库对象设置一个同义词,就好像别名一样。如此的话,在访问的时候,只需要通过同义词访问即可,而不需要输入这么长的对象名。

除了上面三个应用之外,在分布式数据库系统中,为存储在远程数据库中的对象创建同义词,使用户可以像使用本地对象一样对远程对象进行操作,就不需要提供网络连接名进行限定了。显然,这也会给一些分布式数据库管理员带来很大的便利。

Oracle数据库同义词有两种类型,分别是公用同义词与方案同义词。

公用同义词由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。在引用这些对象时,并不需要在其前面添加一个Public所有者名字作为限定。否则的话,如果在一个公用同义词前加上一个Public,就是画蛇添足,系统反而会给出一个错误提示。不过在实际应用中,笔者不建议用户采用公用同义词。因为现在系统中,公用同义词已经有很多。若用户仍然为数据库定义公用同义词的话,不能够起到简化数据库对象访问的作用。

方案同义词是跟公用同义词所对应,他是由创建他的用户或者方案所有。故也被称为私有同义词。当然,这个同义词的创建者,可以控制其他用户是否有权使用属于自己的方案同义词。方案同义词经常在应用程序开发中使用,为应用开发提供命名上的解决方案。如当一个数据库对象,如一张表,被重命名或者被复制成新的表时,并且新名字与老名字都需要使用的情况下,数据库管理员就可以使用方案同义词,即为老名字和新名字都建立专用同义词,不过他们都同时指向同一个数据库对象。

其实创建方案同义词也很简单。不过其必须要有一个前期条件,就是必须要拥有一定的权限,如CREATE SYNONYM权限,若是要在他人的方案中建立同义词的话,则还必须拥有CREATE ANY SYNONYM权限等等。这些是必须遵循的首要条件。否则的话,就不能够建立同义词。

另外需要注意的是,即使在数据库对象不存在的情况下,也可以为预计要建立的数据库对象设置同义词。这个特性很好用,它可以帮助数据库开发团队或者应用程序开发团队进行更高的协作。如只要数据库管理员跟应用程序预先做好对象的命名与同义词的定义工作,那么即使数据库管理员还没有开发好某个数据库对象,前台应用程序开发人员也可以通过引用同义词的方式引用为建立的数据库对象。如此的话,就不会因为某一步工作没有完成而给其他人的工作带来什么负面影响。

在方案同义词使用的过程中,还需要注意以下几个问题。

一是要注意使用自己的方案与他人方案的同义词方法有一定的差别。当用户在自己的方案内建立同义词后,用户就有对象的所有权限。可以像使用原来的数据库对象那样,使用这个对象的同义词。如查询数据、插入修改删除纪录等等。但是,与公用同义词不同,无论是否给其他用户授予如何使用方案同义词所对应的对象的对象权限,都不能够使用方案同义词,因为同义词是私有的。也就是说,如果有一张USER表。用户A虽然有CREATE ANY SYNONYM权限,可以为这个数据库对象建立同义词。但是,其没有这张表的Select权限。则用户A仍然不能够利用这个同义词来访问这个数据库对象。否则的话,数据库会提示“表或者视图不存在”。若A用户想要通过同义词访问这个User表的话,则必须拥有这个表的Select等对应的权限,才能够利用同义词对这个表进行对应的操作。也就是说,通过自己的方案中创建指向其他方案中的对象的方案同义词,只有在被授予了如何访问对象的对象权限之后,才可以按对象权限访问对象。另外需要注意,由于方案同义词是私有的,所以,其他用户使用自己方案同义词的话,在任何情况下,即使拥有某个对象的相关权限,也无法进行访问。这就是方案同义词的私有本质。

二是要注意Oracle数据库中的名称解析顺序。如我们通过FROM user 这个子句访问某个表的时候,数据库是如何来查询数据库中是否存在这个对象呢?他是有一定的解析顺序的。当我们书写的程序代码中若引用了一个未限定的数据库对象,如表、视图、存储过程等等,数据库会根据一定的顺序去查询是否有被引用的对象。通常情况下,会按如下的顺序进行验证。首先是看看当前用户是否拥有这个对象;其次这个对象名是否是当前用户拥有的一个同义词;最后,才去判断公用同义词的情况。所以,在实际应用中,我们数据库管理员要尽量利用方案同义词,少用公用同义词。这对提高数据库的运行效率还是很有帮助的。

三是数据字典视图就是公用同义词的一个好例子。有时候,我们可以借鉴他的配置来管理我们的公用同义词与方案同义词。在实际工作中,我们也可以预先把所有的数据库对象名设计好,并配上所有的同义词。然后利用脚本进行一次性生成。若一个个去生成同义词的话,在其工作量还是蛮大的。

同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。

分享到:

2010-08-04 23:50

浏览 2162

分类:数据库

评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简述C#中应用程序集的装载过程

了解程序集如何在C#.NET中加载我们一直在处理库和NuGet软件包。不管是好是坏,高级.NET开发人员都需要了解.NET运行时如何加载程序集。这些库依赖于其他流行的库,并且有很多共享的依赖项。有了足够大的依赖关系网络,您最终将陷入冲…

vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档

代码文档是软件开发使用和维护的必备资料,有了文档,开发和维护以及协作的效率将变得大大提升。tips:如果对 JSDoc 已经熟悉,可以直接跳到实战演练环节。什么是文档?软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的…

python小游戏——21点

编写一副扑克牌和一个发牌函数,要求: (1) 创建一副扑克牌,不包含两个Joker,其它牌面每个四张,花色可以用任意特殊符号表示; (2) 按照21点的游戏规则,使用学过的数据类型来指定每张牌的点数,其中数字牌的点数与同数字大小,J、Q和K的点数为0.5,A的点数为1; (3) 发牌函…

Magicodes.IE 2.5版本发布

今天我们发布了2.5版本,这当然也离不开大家对Magicodes.IE的支持,今天我也是跟往常一样列举了该版本一些重要的更新内容。当然也要说一下,在这个版本中我们设计了全新的LOGO。Excel导出Excel导出支持HeaderRowIndex #164(https://…

算法题目——最短路径问题(HDU—1007)

题目链接:HDU-1007 前序: 先看一维中的最短路径的计算方式 问题的简单描述:(题意) 在一个笛卡尔系中,n个点分布不一,在这N个点中,求出相距最短的两个点之间的距离 思路: 分治二分法 解题报告…

没有Kubernets,学习Docker还有用吗?

Docker容器化和Kubernetes容器编排,作为微服务和云原生的核心依赖,这几年已是大红大紫全民皆知。然而近日Kubernetes官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,惊呆了一众开发者。在这背后,究竟是人性的扭曲&…

oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...

(1)set serveroutput on实现plsql developer 打印输出(2)如何查看存储过程,存储函数,触发器的内容查 user_sources表eg:查询GET_DEPT_SUMSAL这个存储函数的内容SQL> desc user_source名称 是否为空? 类型-------------------------------…

算法题目——二次函数三分求极值(HDU-3714)

题目链接:HDU-3714 题目描述: 对于N个二次函数,求每个二次函数的最小值中的最大值 思路: 使用三分法求极值(递归调用) 对于这种在指定区间里只有一个极值点的函数(凸函数凹函数都可以&#xff…

怎样才能去掉图片锁定纵横比_1分钟批量统一Word中300张图片的大小!无需插件、代码,超级简单...

很多时候我们需要将在Word中插入很多张图片,插入完成之后,一般我们还要统一它们的大小,如果是少量的图片的话,我们可以一个一个选择,然后再进行设置。或者先设置好一张图片后,再通过【F4】键,进…

我国火力发电站的大脑用上了国产系统

近年来,我国核电、水电、风电、光伏产业发展迅速,但从发电总量来看,火电依然占据7成以上的发电比例。水电、风电、光伏等清洁能源受自然条件限制,只能成为火电的有效补充,而不可能取代火电。而福岛核事故、切尔诺贝利核…

require 动态加载_require,exports,module.exports和import,export,export default

我们前端在开发过程中经常会遇到导入导出功能,在导入时,有时候是require,有时候是import在导出时,有时候是exports,module.exports,有时候是export,export default今天我们对这些内容进行简单的…

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

Newbe.Claptrap 0.4.4 发布,模型验证器上线。更新内容完全基于表达式树的模型验证器本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。我们罗列了与 FluentValidation 比较的情况:Build in ValidatorsFluentVali…

算法题目中经典问题(易错点)

算法题目中经典问题.易错点 (一).二维数组的传参问题1.方法一:形参为二维数组并给定第二维长度2.方法二:形参为指向数组的指针并给出数组长度3.二维数组定义为全局变量(二).多组测试控制台数据,输入到文件结束(三).进制转换中的小问题1.使用字符串来存储,每一位(四).结构体…

dotnet core 应用是如何跑起来的 通过AppHost理解运行过程

在 dotnet 的输出路径里面,可以看到有一个有趣的可执行文件,这个可执行文件是如何在框架发布和独立发布的时候,找到 dotnet 程序的运行时的,这个可执行文件里面包含了哪些内容在回答上面的问题之前,请大家尝试打开 C:\…

算法题目——整数划分(HRBUST-2004)

题目链接:HRBUST-2004 递归法: 1.当n1时,此时只有1种解{1}; 2.当m1时,此时也只有1种解{1,1,1, … 3.当n> m时,要分为最大数包含m和不包含m两种情况。 ●包含m:此时就是{mx1,2…}. 其中x1x23.… n-m, 就相当于求和为n-m,最…

dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程

在上一篇博客是使用官方提供的 AppHost 跑起来整个 dotnet 程序。本文告诉大家在 dotnet 程序运行到托管代码之前,所需要的 Native 部分的逻辑。包括如何寻找 dotnet 运行时,如何加载运行时和框架然后跑起来业务端的 dll 文件的逻辑在上一篇博客告诉大家…

android虚线边框_Android实现代码画虚线边框背景效果

实现如下边框效果:虚线画效果,可以使用Android中的xml来做。下面话不多说,直接上代码:android:id"id/coupon_popup"android:layout_width"320dp"android:layout_height"200dp"android:layout_margi…

算法题目——多米诺骨牌问题(POJ-2663)

题目链接:POJ-2663 设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放到棋盘上,使得任何两张多米诺牌均不重叠&…

【招聘(上海)】 坚果云 招聘Windows客户端(WPF方向)

岗位职责:1、负责坚果云在Windows 10平台上WPF应用的开发与维护;2、负责基于WPF的Windows平台核心客户端产品开发,维护与测试;3、WPF桌面应用将具备丰富的文件展示和文件管理功能,其中与操作系统交互, 复杂…

三相全桥整流电路_三相桥式全控整流电路

收稿日期:2002-04-12作者简介:陈强(1976—),男,硕士研究生1三相桥式全控整流及单相交流调压实验装置的研制陈强,杨旭,王兆安(西安交通大学电气工程学院,西安710049)摘要:本文结合具体的三相全控整流电路的研制,介绍了以国产集成芯片KJ004和KJ041为中心的触发电路的工作过程及主…