Как дать права на вьюху, которая использует dblink?

Dvornik123
Дата: 31.05.2006 11:12:07
Привет всем!!!
Есть линк с одной базы на другую. Создаю вюьху с использованием этого линка. Даю права на вьюху другим пользователям. Но другие пользователи не могут использовать вьюху - т.к. нет прав на линк, точнее не видят описания:
ORA-04052: error occurred when looking up remote object
<OBJECT>
ORA-00604: error occurred at recursive SQL level 1
ORA-02019: connection description for remote database not found
Но вьюха подключается к другой базе с именем/паролем и если дать всем доступ к линку (сделать его
public
), то пользователи смогут тащить с другой базы все что доступно пользователью через кот. идет линк к другой базе, а это не входит в мои планы.
Вижу след решения:
1. Создать в другой базе пользователя с ограниченными правами и ходить через него
- База чужая - не хочется лезть, и уж совсем задница будет если понадобится еще данные, с разделением прав в исходной базе, это на каждую "задачу своего пользователя и линк :-(
2. Создать скрипт, кот. будет тащить данные в локальную таблицу, а пользователи уже будут смотреть данные из локальной таблицы.
- Для получения данных надо не просто дернуть вьюху, но и процедуру. А так же по таблице на каждый запрос или излишние преобразования типов через универсальную таблицу.
Есть еще предложения или улучшения вариантов?
Вадиман
Дата: 31.05.2006 11:28:05
правильно делать по первому варианту
все будет ровно и красиво
Вячеслав Любомудров
Дата: 31.05.2006 11:40:53
Что-то тут не то
1 БД:
fbsd> create view v1 as select dummy from dual;

View created.
Другая БД (блин, какой умник такое выделение кода придумал)
tst> connect u1/u1@tst
Connected.
tst> sho user
USER is "U1"
tst> create database link fbsd connect to u1 identified by u1 using 'fbsd';

Database link created.

tst> create view v1 as select * from v1@fbsd;

View created.

tst> create view v2 as select * from dual;

View created.

tst> grant select on v1 to u2;

Grant succeeded.

tst> connect u2/u2@tst
Connected.
tst> select * from u1.v1;

D
-
X

tst> select * from u1.v2;
select * from u1.v2
                 *
ERROR at line 1:
ORA-00942: table or view does not exist


tst> select * from v1@fbsd;
select * from v1@fbsd
                 *
ERROR at line 1:
ORA-02019: connection description for remote database not found

Dvornik123
Дата: 31.05.2006 12:59:22
2 Вячеслав Любомудров
понял - повторил - работает. Стал ковырять рабочий вариант. Выяснил что проблема возникает, когда я пытаюсь в вьюхе вызвать функцию из пакета, причем не пользователя к которому идет линк а другого пользователя. Т.е. упрощенный вариант вьюхи:
create view v1 as select user1.package.function@linkname(param) as ff from dual;

не работает:
ORA-04052: error occurred when looking up remote object
user1.package@linkname
ORA-00604: error occurred at recursive SQL level 1
ORA-02019: connection description for remote database not found

Попробовал дать синоним на user1.package@linkname - ошибка не изменилась.
Получилось сделать с функциями переходниками:
create or replace function get_ff return varchar2
as
begin
  return user1.package.function@linkname(3060001);
end;
/
create or replace view v1 as select get_ff ff from dual;
и под u2:
select * from u1.v1;
работает. В принципе - это уже нормальный вариант. Но если есть способ обойтись без создания функций переходников - был бы счастлив.