设为首页 收藏本站
查看: 1062|回复: 0

[经验分享] ORACLE 同义词(SYNONYM)详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-9 09:52:31 | 显示全部楼层 |阅读模式
以下内容整理自Oracle 官方文档
一 概念A synonym is an alias for any table, view,materialized view, sequence, procedure, function, package, type, Java classschema object, user-defined object type, or another synonym. Because a synonymis simply an alias, it requires no storage other than its definition in thedata dictionary.
Oracle中同义词是任何表、视图、物化视图、序列、存储过程、函数、包、类型、JAVA类对象、用户定义类型,或是其他的同义词的别名。由于其只是一个别名,所以除了在
数据字典中的定义不占任何空间。

Synonyms are often used for security andconvenience. For example, they can do the following:
同义词常用于安全和方便。例如,它们可以做:
1. Mask the name and owner of anobject  伪装对象名称和其所有者。
2. Provide location transparency for remoteobjects of a distributed database 为分布式数据库远程对象提供位置透明性
3. Simplify SQL statements for databaseusers 简化数据库用户访问对象SQL语句
4. Enable restricted access similar tospecialized views when exercising fine-grained access control 当行使精细化访问控制时提供类似指定视图的访问限制


You can create both public and privatesynonyms. A public synonym is owned by the special user group named PUBLIC andevery user in a database can access it. A private synonym is in the schema of aspecific user who has control over its availability to others.
你可以创建public和private同义词。public同义词属于PUBLIC组,每个用户都可以访问。private同义词属于对象所有者,只有其显式授权后其他用户才可访问。

Synonyms are very useful in bothdistributed and nondistributed database environments because they hide theidentity of the underlying object, including its location in a distributedsystem. This is advantageous because if the underlying object must be renamedor moved, then only the synonym needs to be redefined. Applications based onthe synonym continue to function without modification.
同义词的优势体现在如果其底层的对象重命名或者转移,那么只需要重定义该同义词。基于该同义词的应用则无需任何修改。

Synonyms can also simplify SQL statementsfor users in a distributed database system. The following example shows how andwhy public synonyms are often created by a database administrator to hide theidentity of a base table and reduce the complexity of SQL statements. Assume thefollowing:
下面举例说明同义词是如何简化用户访问的:

A table called SALES_DATA is in the schemaowned by the user JWARD.
JWARD用户下有一张表 SALES_DATA

The SELECT privilege for the SALES_DATAtable is granted to PUBLIC.
PUBLIC组有SALES_DATA的查询权限

At this point, you have to query the tableSALES_DATA with a SQL statement similar to the following:
此时,你如果查询SALES_DATA表则需以下语句:
SELECT * FROM jward.sales_data;

Notice how you must include both the schemathat contains the table along with the table name to perform the query.

Assume that the database administratorcreates a public synonym with the following SQL statement:
假如数据库管理员创建了一个public 同义词:

CREATE PUBLIC SYNONYM sales FORjward.sales_data;

After the public synonym is created, youcan query the table SALES_DATA with a simple SQL statement:
你的语句将简化为:

SELECT * FROM sales;

Notice that the public synonym SALES hidesthe name of the table SALES_DATA and the name of the schema that contains thetable.


二、CREATE SYNONYM 创建同义词 1、语法结构:
Center.jpg
2、前提条件:
在自己模式下创建私有同义词需要CREATE SYNONYM权限。
在其他用户模式下创建私有同义词需要CREATE ANY SYNONYM权限。
创建公有同义词,需要有CREATE PUBLIC SYNONYM权限。

3、示例
sqlplus / as sysdba

CREATE SYNONYM offices
  FOR hr.locations;

GRANT SELECT ON hr.locations to SCOTT;

CREATE PUBLIC DATABASE LINK l_hr
  CONNECT TO hr IDENTIFIED BY hr
  USING 'orcl';

CREATE PUBLIC SYNONYM emp_table
  FORHR.employees@l_hr;

GRANT SELECT ON HR.employees to SCOTT;

conn scott/tiger@orcl

SELECT count(*) from sys.offices;

select count(*) from emp_table;


三、DROP SYNONYM  删除同义词  1、语法结构:
Center.jpg

2、前提条件:
删除私有同义词需要有DROP ANY SYNONYM权限。
删除公有同义词需要有DROP PUBLIC SYNONYM权限。

3、示例
  3.1删除public同义词,必须加public关键字:
         SYS@orcl>DROP SYNONYM emp_table;
         DROPSYNONYM emp_table
                                      *
         第 1 行出现错误:
         ORA-01434:要删除的专用同义词不存在


         SYS@orcl>DROP PUBLIC SYNONYM emp_table;

         同义词已删除。

  3.2删除private同义词:
DROP SYNONYM offices;

四、Q&A 问答
Q: 可以对同义词做INSERT/UPDATE/DELETE操作吗?
A:
SCOTT@orcl> UPDATE sys.offices t SETt.city='Shanghai' WHERE location_id=1000;
UPDATE sys.offices t SET t.city='Shanghai'WHERE location_id=1000
          *
第 1 行出现错误:
ORA-01031: 权限不足
SYS@orcl> grant update on hr.locationsto scott;

授权成功。
SCOTT@orcl> /

已更新 1 行。

SO: 用户对同义词的操作权限都是基于对其底层对象有哪些操作权限。






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-21871-1-1.html 上篇帖子: oracle exp实例 下篇帖子: 10.2.0.4 to 10.2.0.5 Installation of Patch Set Release (Windows) 同义词
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表