Oracle的sql基本语法总结(3)-- Oracle synonym 同义词的创建、查看、删除、作用

目录

一、Oracle synonym 同义词

语法结构:

案例解析:

--基础准备与说明:

synonym 同义词创建:

创建同义词补充说明(远程操作)

二、Oracle synonym 同义词作用


一、Oracle synonym 同义词

Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象。Oracle同义词常常是给表、视图、函数、过程、包等制定别名,可以通过CREATE 命令进行创建、ALTER 命令进行修改、DROP 命令执行删除操作。 

Oracle synonym 同义词按照访问权限分为私有同义词公有同义词

  • 私有同义词:私有同义词只能当前用户可以访问,前提:当前用户具有create synonym 权限。
  • 公有同义词:公有同义词只能具有DBA角色(如:system)的用户才能进行创建,所有用户都可以访问的。

语法结构:

CREATE [OR REPLACE] [PUBLIC] SYSNONYM [当前用户.]synonym_name
FOR [其他用户.]object_name;

语法解析:

  • 1.create [or replace] 命令创建,加上 or replace 表示如果存在就替换,慎用。
  • 2.[public]:创建的是公有同义词,在实际开发过程中少用,创建公有就代表着任何用户都可以通过自己用户访问操作该对象,一般我们访问其他用户对象时,需要该用户进行授权给我们。
  • 3.用户名.object_name:oralce用户对象的权限都是自己用户进行管理的,需要其他用户的某个对象的操作权限,只能通过对象拥有者(用户)进行授权给当前用户。或者当前用户具有系统管理员权限(DBA),即可通过用户名.object_name操作该对象

案例解析:

--基础准备与说明:

①创建一个普通用户jalen01

create user jalen01 identified by "a123456";

②授予连接登陆权限

grant create session to jalen01;

③连接jalen01用户测试,现在表空间里什么都没有,没有给该用户授权添加表空间的权限

  

④登录scott用户,把scott下的emp表的所有操作权限给jalen01用户

grant all on scott.emp to jalen01;

⑤这时候虽然没有给jalen01表空间权限,但是通过scott用户的授权,jalen01用户可以操作scott.emp表,但其他表依然无法操作(如scott.dept)。

⑥现在用管理员用户给jalen01授予操作表空间和表的权限,再次登陆jalen01看看就有scott.emp表存在

grant unlimited tablespace to jalen01;

grant create table to jalen01; --为了方便测试也给jalen01用户授予操作表的权限

synonym 同义词创建:

① 登陆到scott用户,给表emp和dept分别创建同义词

create synonym emp_copy for scott.emp;  --私有同义词
create synonym dept_copy for scott.dept;  --私有同义词
create public synonym dept_copy01 for scott.dept; --公有同意词

②在scott用户下访问同义词的三个表,均可以查询

select * from emp_copy;
select * from dept_copy;
select * from dept_copy01;

③登陆到jalen01用户下,查看这三个同义词表,结果发现普通用户不管是私有的还是共有的都没权访问

select * from emp_copy;
select * from dept_copy;
select * from dept_copy01;

④除了同义词,jalen01用户还需有对scott用户下表的访问权限,切换到管理员用户下授权

grant all on emp_copy to jalen01;
grant all on dept_copy to jalen01;
grant all on dept_copy01 to jalen01;

⑤再次登陆到jalen01用户下,查看这三个同义词表,这时候发现私有的同义词其他用户依然是不能访问的,但公有的同义词授权后其他用户可以访问。

select * from emp_copy;
select * from dept_copy;
select * from dept_copy01;

⑥只要是授予了create synonym 的用户均可以给其他(有访问权)的用户创建synonym,drop synonym同理

删除synonym的语法:DROP [PUBLIC] SYNONYM [用户.]sysnonym_name;

创建同义词补充说明(远程操作)

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

必须给在user用户中给当前用户(jalen01)授权: 操作(增删改查)表、synonym的权限

创建同义词SQL语句:create [public] synonym table_name for jalen01.table_name;

二、Oracle synonym 同义词作用

oracle中对用户的管理是使用权限的方式来管理的,当前用户要使用数据库必须要有权限,有权限对表进行的操作时必须在表的前面所有者的名称,如select * from user1.table1,当我们建一个同义词后可以直接使用select * from table1对数据库表进行操作。于是,同义词有如下优点:

  • 1)多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名.object名的形式,采用了Oracle同义词之后就可以隐蔽掉user名,当然这里要注意的是:public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。
  • 2) 为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个Oracle同义词来简化sql开发。
  • 3)为分布式数据库的远程对象提供位置透明性。
发布了103 篇原创文章 · 获赞 75 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41685388/article/details/103540621
今日推荐