`

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 这个子句访问某个表的时候,数据库是如何来查询数据库中是否存在这个对象呢?他是有一定的解析顺序的。当我们书写的程序代码中若引用了一个未限定的数据库对象,如表、视图、存储过程等等,数据库会根据一定的顺序去查询是否有被引用的对象。通常情况下,会按如下的顺序进行验证。首先是看看当前用户是否拥有这个对象;其次这个对象名是否是当前用户拥有的一个同义词;最后,才去判断公用同义词的情况。所以,在实际应用中,我们数据库管理员要尽量利用方案同义词,少用公用同义词。这对提高数据库的运行效率还是很有帮助的。
  三是数据字典视图就是公用同义词的一个好例子。有时候,我们可以借鉴他的配置来管理我们的公用同义词与方案同义词。在实际工作中,我们也可以预先把所有的数据库对象名设计好,并配上所有的同义词。然后利用脚本进行一次性生成。若一个个去生成同义词的话,在其工作量还是蛮大的。

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

分享到:
评论

相关推荐

    Oracle的同义词(synonyms)总结

    ### Oracle的同义词(Synonyms)总结 #### 一、引言 在数据库管理领域,Oracle是一款广泛使用的数据库管理系统。为了提高数据访问的安全性和便捷性,Oracle引入了同义词(Synonyms)这一概念。同义词可以视为对表...

    Oracle 同义词和视图

    在Oracle数据库中,同义词(Synonyms)和视图(Views)是两种非常重要的对象,它们都提供了数据访问和管理的便捷方式。下面将详细解释这两种概念以及它们在实际应用中的作用。 **同义词** 同义词是Oracle数据库提供...

    Oracle中定义以及使用同义词的方法

    总的来说,Oracle同义词是数据库管理和协作中不可或缺的一部分,它通过提供对象的替代名称,简化了SQL语句,增强了安全性,并在分布式环境中的数据访问上提供了灵活性。理解和正确使用同义词,可以极大地提升数据库...

    实用的数据库赋权和同义词的存储过程,用于oracle

    接下来,我们讨论"同义词"(Synonyms)。同义词在Oracle中是一种数据库对象,它允许用户使用一个别名来引用实际的对象,如表、视图或过程。这提供了两个主要好处: 1. 隐藏对象的实际名称:对于外部用户,同义词可以...

    oracle作业视图和同义词

    #### 同义词(Synonyms) 同义词在Oracle数据库中是一种对象,它为另一个对象提供别名。同义词可以分为公有同义词和私有同义词两种类型。 ##### 创建公有同义词 根据实验内容,我们创建一个名为`Pub_syn`的公有同义...

    利用oracle同义词技术加强对MIS系统数据接口管理控制.pdf

    利用Oracle同义词技术,MIS系统可以更好地控制数据接口的安全性,提高数据对象的透明度,并简化分布式接口的访问。通过这种方式,不仅可以降低安全风险,还可以提升系统的整体管理效率,为企业的信息化建设提供有力...

    MLDN魔乐科技_Oracle课堂22_序列、同义词

    在Oracle数据库系统中,"序列"(Sequences)和"同义词"(Synonyms)是两个非常重要的概念,它们对于数据库的管理和数据操作起到关键作用。本堂Oracle课堂将深入探讨这两个主题。 首先,我们来理解序列。序列在...

    MLDN魔乐科技JAVA培训_Oracle课堂22_序列、同义词.rar

    【标题】: "MLDN魔乐科技JAVA培训_Oracle课堂22_序列、同义词.rar" 涉及到的Oracle数据库中的两个关键概念——序列(Sequences)和同义词(Synonyms),这些都是在数据库管理和开发中常用的数据对象。 【序列...

    SQL语句中create的使用(synonym同义词).doc

    在数据库管理领域,特别是Oracle数据库中,为了提升数据访问的便捷性和安全性,同义词(Synonym)这一概念被广泛采用。本文将详细介绍如何创建、使用以及管理同义词,并通过具体的例子帮助读者更好地理解同义词的...

    Oracle实验3:视图、序列、同义词和索引.docx

    在Oracle数据库管理中,实验3涉及到了几个关键的数据库对象:视图、序列、同义词和索引。这些元素是构建和管理高效数据库系统的重要组成部分。以下是它们的详细解释和示例: 1. **视图(View)**: 视图是从一个或...

    查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)

    这些对象包括用户、表视图、索引、表空间、同义词、存储过程和函数以及约束条件。接下来,我们将深入探讨这些概念及其在实际工作中的应用。 **用户**: Oracle数据库中的用户是具有特定权限的角色,用于组织数据的...

    OCP 082试题-2022.5.2更新.docx

    ### 关于Oracle同义词(Synonyms)的真确陈述 在Oracle数据库中,同义词是一种用于简化对象名称或隐藏对象真实名称的对象。以下是对题目中关于Oracle同义词正确陈述的解析: 1. **同义词可以具有另一个同义词 (B)** ...

    大型数据库系统概论课件 第6章 Oracle9i数据库对象的管理(3).ppt

    查看和编辑同义词也可以通过企业管理器或查询相关的系统视图,如DBA_SYNONYMS,来获取或修改同义词信息。 簇(Cluster)在Oracle数据库中是一种特殊的数据组织形式,它将具有相同关键字段的多个表物理地聚集在一起...

    oracle表分区PPT课件.pptx

    同义词(Synonyms)是Oracle数据库中的一个重要概念,它为表、视图、序列、存储过程等对象提供了别名。同义词的主要优点在于提供了一层安全性,隐藏了对象的实际拥有者和名称,并简化了SQL语句。它们可以分为公共和...

    Oracle系统表汇总.docx

    通过dba_synonyms视图,可以查询同义词的基本信息,包括同义词名称、同义词类型、创建日期等信息。 数据库链管理 数据库链是Oracle数据库中的一种特殊类型的数据库对象,用于提供对远程数据库的访问。数据库链管理...

    【数据库】oracle日常操作

    五、同义词(Synonyms) 1. 同义词在Oracle中是为表、视图或过程创建的一个别名,允许用户用一个简单的名称来代替完整对象名,提高代码的可读性和方便性。 2. 创建同义词的SQL语句如下: ```sql CREATE SYNONYM ...

    oracle讲解Chapter3.pptx

    首先,同义词(Synonyms)是Oracle数据库提供的一种对象替代名称,类似于别名,用于简化SQL语句、隐藏对象的真实名称和所有者,同时提供对分布式数据库中远程对象的位置透明访问。同义词分为私有和公用两种类型。...

    oracle dblink 的应用

    5. 同义词(Synonyms)的使用: - 同义词是数据库对象的别名,可以用于简化 dblink 的使用。创建同义词有两种方式,一种是针对本地数据库对象,另一种是针对远程数据库对象。 ```sql CREATE SYNONYM 同义词名 FOR...

    Oracle_系统表大全.docx

    10. 同义词管理:Oracle 系统表大全中包含了同义词管理相关的信息,例如同义词列表、同义词类型、同义词所有者等。通过查询 dba_synonyms 表,可以获取所有同义词的信息。例如,select * from dba_synonyms; 可以...

Global site tag (gtag.js) - Google Analytics