Доступ к синониму объекта ссылки БД

Справочная информация: у нас есть база данных FIN со схемой FIN_DEV.

У нас есть другое приложение базы данных со схемой APP_DEV.

Ссылка на БД создается в APP_DEV, указывающей на FIN_DEV.

CREATE DATABASE LINK FINDEV_FIN
CONNECT TO FIN_DEV
IDENTIFIED BY <PWD>
USING 'FIN'

Мы можем получить доступ к объектам в FIN_DEV из APP_DEV, используя

CREATE OR REPLACE SYNONYM TBL_FINA FOR TBL_FINA@FINDEV_FIN

Все хорошо до этого момента.

Вот вопрос:

Другой схеме INT_DEV в базе данных APP требуется доступ к SYNONYM TBL_FINA из INT_DEV.

Не могли бы вы сообщить мне, как лучше всего это сделать?


person AJORA    schedule 04.01.2020    source источник


Ответы (1)


Вот как; У меня нет ваших пользователей (и не хочется их создавать), так что:

  • моя удаленная база данных = 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
comment
Спасибо, @Littlefoot. Очень ценю то, как вы объяснили шаг за шагом. Я пробовал, и это работает. Спасибо еще раз!! - person AJORA; 05.01.2020