访问 DB link 对象的同义词
Accessing synonym of DB link object
背景:
我们的数据库 FIN 的架构为 FIN_DEV.
我们有另一个具有架构 APP_DEV 的数据库应用程序。
数据库 link 在 APP_DEV 中创建,指向 FIN_DEV
CREATE DATABASE LINK FINDEV_FIN
CONNECT TO FIN_DEV
IDENTIFIED BY <PWD>
USING 'FIN'
我们可以使用
从APP_DEV访问FIN_DEV中的对象
CREATE OR REPLACE SYNONYM TBL_FINA FOR TBL_FINA@FINDEV_FIN
到目前为止一切都很好。
问题来了:
APP 数据库中的另一个模式 INT_DEV 需要从 INT_DEV 访问 SYNONYM TBL_FINA。
你能告诉我完成这个的最佳方法吗?
方法如下;我没有你的用户(也不想创建他们),所以:
- 我的远程数据库=
orcl
(这是你的fin
数据库)
- 我的远程数据库中的用户 =
my_remote_user
(在你的数据库中是 fin_dev
)
- 我本地数据库中的用户 =
scott
(app_dev
在你的数据库中)
- 它将创建一个数据库 link 和一个同义词
- 我本地数据库中的另一个用户 =
mike
(int_dev
在您的数据库中)
在 远程数据库 中,我正在创建一个 table 来模拟您的情况:
SQL> create table tbl_fina (id number);
Table created.
SQL> insert into tbl_fina values (1);
1 row created.
SQL> commit;
Commit complete.
SQL>
正在连接到 本地数据库,创建数据库 link & 同义词:
SQL> show user
USER is "SCOTT"
SQL> create database link findev_fin
2 connect to my_remote_user
3 identified by its_password
4 using 'orcl';
Database link created.
SQL> -- Testing, whether the DB link works
SQL> select * From dual@findev_fin;
D
-
X
SQL> -- Creating a snynonym
SQL> create synonym tbl_fina for tbl_fina@findev_fin;
Synonym created.
SQL> select * from tbl_fina;
ID
----------
1
SQL>
到目前为止,一切顺利 - 这就是您目前拥有的。
现在,让我们允许另一个用户(在我的本地数据库中)访问该同义词。直接的解决方案是授予 select 对吧?
SQL> grant select on tbl_fina to mike;
grant select on tbl_fina to mike
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
SQL>
糟糕!那行不通的。解决方法是创建一个 view(在同义词上)并将该视图上的 select 授予 mike
:
SQL> create view v_tbl_fina as select * from tbl_fina;
View created.
SQL> grant select on v_tbl_fina to mike;
Grant succeeded.
SQL>
行得通。最后,以另一个用户身份连接并从视图中 select(即同义词):
SQL> connect mike/pwd
Connected.
SQL> select * from scott.v_tbl_fina;
ID
----------
1
SQL>
为了更容易访问 - 避免命名视图所有者 (scott
) - mike
现在可以创建自己的同义词:
SQL> create synonym tbl_fina for scott.v_tbl_fina;
Synonym created.
SQL> select * from tbl_fina;
ID
----------
1
SQL>
当然,另一种选择是在我的 mike
用户中创建一个数据库 link,但这有点危险,因为数据库 link 允许其所有者虚拟 任何东西在远程数据库中,因为它现在由远程用户名和密码识别。
背景: 我们的数据库 FIN 的架构为 FIN_DEV.
我们有另一个具有架构 APP_DEV 的数据库应用程序。
数据库 link 在 APP_DEV 中创建,指向 FIN_DEV
CREATE DATABASE LINK FINDEV_FIN
CONNECT TO FIN_DEV
IDENTIFIED BY <PWD>
USING 'FIN'
我们可以使用
从APP_DEV访问FIN_DEV中的对象CREATE OR REPLACE SYNONYM TBL_FINA FOR TBL_FINA@FINDEV_FIN
到目前为止一切都很好。
问题来了:
APP 数据库中的另一个模式 INT_DEV 需要从 INT_DEV 访问 SYNONYM TBL_FINA。
你能告诉我完成这个的最佳方法吗?
方法如下;我没有你的用户(也不想创建他们),所以:
- 我的远程数据库=
orcl
(这是你的fin
数据库) - 我的远程数据库中的用户 =
my_remote_user
(在你的数据库中是fin_dev
) - 我本地数据库中的用户 =
scott
(app_dev
在你的数据库中)- 它将创建一个数据库 link 和一个同义词
- 我本地数据库中的另一个用户 =
mike
(int_dev
在您的数据库中)
在 远程数据库 中,我正在创建一个 table 来模拟您的情况:
SQL> create table tbl_fina (id number);
Table created.
SQL> insert into tbl_fina values (1);
1 row created.
SQL> commit;
Commit complete.
SQL>
正在连接到 本地数据库,创建数据库 link & 同义词:
SQL> show user
USER is "SCOTT"
SQL> create database link findev_fin
2 connect to my_remote_user
3 identified by its_password
4 using 'orcl';
Database link created.
SQL> -- Testing, whether the DB link works
SQL> select * From dual@findev_fin;
D
-
X
SQL> -- Creating a snynonym
SQL> create synonym tbl_fina for tbl_fina@findev_fin;
Synonym created.
SQL> select * from tbl_fina;
ID
----------
1
SQL>
到目前为止,一切顺利 - 这就是您目前拥有的。
现在,让我们允许另一个用户(在我的本地数据库中)访问该同义词。直接的解决方案是授予 select 对吧?
SQL> grant select on tbl_fina to mike;
grant select on tbl_fina to mike
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
SQL>
糟糕!那行不通的。解决方法是创建一个 view(在同义词上)并将该视图上的 select 授予 mike
:
SQL> create view v_tbl_fina as select * from tbl_fina;
View created.
SQL> grant select on v_tbl_fina to mike;
Grant succeeded.
SQL>
行得通。最后,以另一个用户身份连接并从视图中 select(即同义词):
SQL> connect mike/pwd
Connected.
SQL> select * from scott.v_tbl_fina;
ID
----------
1
SQL>
为了更容易访问 - 避免命名视图所有者 (scott
) - mike
现在可以创建自己的同义词:
SQL> create synonym tbl_fina for scott.v_tbl_fina;
Synonym created.
SQL> select * from tbl_fina;
ID
----------
1
SQL>
当然,另一种选择是在我的 mike
用户中创建一个数据库 link,但这有点危险,因为数据库 link 允许其所有者虚拟 任何东西在远程数据库中,因为它现在由远程用户名和密码识别。