Oracle使用同义词

一、背景
有两个sid:Asid,Bsid,在Asid下有两个用户Auser1,Auser2,在Bsid下有一个用户Buser1。其中Auser2和Buser1建立了dblink。现希望通过登录Buser1访问Auser1上的三张表table1,table2,table3信息和函数function1。

 

二、步骤
①登录Auser1对Auser2授权(若需要删除则加上delete)
grant insert,select,update on table1 to Auser2;
grant insert,select,update on table2 to Auser2;
grant insert,select,update on table3 to Auser2;
grant execute on function1 to Auser2;

②登录Auser2建立同义词
create synonym table1 for Auser1.table1;
create synonym table2 for Auser1.table1;
create synonym table3 for Auser1.table1;
create synonym function1 for Auser1.function1;

③登录Buser1查找db_link名(例如查出来的db_link名为mydblink1)
select username,db_link from user_db_links

④建立Buser1的同义词
create synonym table1 for Auser2.table1@mydblink1;
create synonym table2 for Auser2.table2@mydblink1;
create synonym table3 for Auser2.table3@mydblink1;
create synonym function1 for Auser2.function1@mydblink1;

⑤测试
此时登录Buser1通过select * from table1就可以访问table1了。

 

三、注意点

也可以建立procedure的同义词,但是这样执行的过程中不允许commit。如果要提交的话请在如JDBC中commit()。


四、一些资料
同义词介绍:http://blog.youkuaiyun.com/woshixuye/article/details/10209239

### Oracle 数据库中同义词的创建与使用 #### 创建同义词Oracle 数据库中,可以通过 `CREATE SYNONYM` 或 `CREATE PUBLIC SYNONYM` 命令来创建同义词。以下是两种类型的同义词: - **私有同义词**:仅限于特定用户或具有相应权限的用户访问。 - **公有同义词**:可供数据库中的所有用户访问。 ##### 私有同义词的创建 私有同义词归属于某个具体的用户模式下,只有该用户或其他被授权的用户才能访问它。其语法如下: ```sql CREATE SYNONYM synonym FOR object; ``` 例如,假设有一个名为 `EMPLOYEE` 的表位于 `HR` 用户下,则可以为这个表创建一个私有同义词: ```sql CREATE SYNONYM emp_syn FOR hr.employee; ``` 此命令将在当前用户的模式下创建一个名为 `emp_syn` 的同义词[^5]。 ##### 公有同义词的创建 公有同义词属于特殊用户组 `PUBLIC`,因此整个数据库的所有用户都可以访问它们。其语法如下: ```sql CREATE PUBLIC SYNONYM synonym FOR object; ``` 例如,如果希望所有的数据库用户都能够轻松访问 `hr.department` 表,可以执行以下命令: ```sql CREATE PUBLIC SYNONYM dept_pub FOR hr.department; ``` 这会创建一个全局可用的同义词 `dept_pub` 来指向 `hr.department` 表[^3]。 #### 删除同义词 当不再需要某一同义词时,可使用 `DROP SYNONYM` 命令将其删除。对于私有同义词和公有同义词分别有不同的形式: ```sql -- 删除私有同义词 DROP SYNONYM synonym; -- 删除公有同义词 DROP PUBLIC SYNONYM synonym; ``` 例如,删除前面创建的私有同义词 `emp_syn` 和公有同义词 `dept_pub` 可以这样操作: ```sql DROP SYNONYM emp_syn; DROP PUBLIC SYNONYM dept_pub; ``` #### 使用同义词 一旦创建了同义词,在查询数据时可以直接使用它的名字代替原始对象的名字。这种方式不仅简化了 SQL 语句编写,还增强了应用程序的灵活性和安全性[^4]。 比如,有了上面提到的 `emp_syn` 后,任何对该同义词所属模式下的用户来说,他们不需要知道实际表格的位置就可以简单地写成: ```sql SELECT * FROM emp_syn WHERE department_id = 10; ``` 同样地,利用公有同义词 `dept_pub` ,其他任意用户也可以直接调用而不必关心底层结构细节: ```sql INSERT INTO dept_pub (department_id, department_name) VALUES (90, 'Executive'); ``` 通过以上介绍可以看出,合理运用同义词能够极大地提升开发效率并保护敏感信息[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值