Вот как; У меня нет ваших пользователей (и не хочется их создавать), так что:
- моя удаленная база данных =
orcl
(это ваша база данных fin
)
- пользователь в моей удаленной базе данных =
my_remote_user
(это fin_dev
в вашей базе данных)
- user in my local database =
scott
(app_dev
in your database)
- it'll create a database link and a synonym
- другой пользователь в моей локальной базе данных =
mike
(int_dev
в вашей базе данных)
В удаленной базе данных я создаю таблицу, имитирующую вашу ситуацию:
SQL> create table tbl_fina (id number);
Table created.
SQL> insert into tbl_fina values (1);
1 row created.
SQL> commit;
Commit complete.
SQL>
Подключение к локальной базе данных, создание ссылки на базу данных и синонима:
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>
Пока все хорошо - это то, что у вас есть на данный момент.
Теперь разрешим другому пользователю — в моей локальной базе данных — получить доступ к этому синониму. Простое решение - предоставить выбор на нем, верно?
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>
Упс! Это не сработает. Обходной путь — создать представление (в синониме) и предоставить выбор в этом представлении для 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>
Это работает. Наконец, подключитесь как другой пользователь и выберите из представления (т.е. синоним):
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
пользователе, но это довольно опасно, поскольку ссылка на базу данных позволяет ее владельцу делать практически все в удаленной базе данных, поскольку она теперь идентифицируется удаленным пользователем. имя пользователя и его пароль.
person
Littlefoot
schedule
04.01.2020