andreymx
Дата: 16.09.2015 13:09:23
такая вот схема:
БД А => есть VIEW ra.view_obs => выданы гранты на схему L@A with grant option
БД E => есть VIEW s.view_mat(внутри таблицы БД E + ra.view_obs@A по паблик линку на L@A)
выданы гранты для чтения view_mat на схему BA@E with grant option
И всё это работало два года
И всё это перестало работать вчера вечером
при заходе в БД А читаем
select * from s.view_mat@link_схему_BA_в БД_E
получаем ORA-00942
Если пересобрать VIEW s.view_mat@E без ra.view_obs@A, то работает, но, ессно, неверно.
Сделал промежуточное решение - создал таблицу s.view_obs@e as select * from ra.view_obs@A; Так работает
Заменили в ra.view_obs всю начинку на select from dual - все равно не работает
Гранты все добавлял - удалял - добавлял - ничего путнего
Оракл 11.2.0.3
Какой-то полтергейст
ЗЫ: все права выдаются на пользователя, не на схему.
ЗЫ1: Судя по логам, за последние сутки причастные к ситуации таблицы не пересоздавались, гранты не менялись
andreymx
Дата: 16.09.2015 13:19:02
и вообще какая-то хрень лезет
-- коннект на схему с основной вьюхой
SQL> conn s/====@E
Connected AS s@E
-- удаляем права на схему, которая смотрит на БД А
SQL> REVOKE SELECT ON view_mat FROM BA
REVOKE COMPLETE.
-- даём права на схему, которая смотрит на БД А
SQL> GRANT SELECT ON view_mat TO BA WITH GRANT OPTION
GRANT COMPLETE.
-- удаляем права на обычную схему B@E
SQL> REVOKE SELECT ON view_mat FROM B
REVOKE COMPLETE.
-- даём права на обычную схему B@E
SQL> GRANT SELECT ON view_mat TO B WITH GRANT OPTION
GRANT COMPLETE.
-- читаем вьюху на родной схеме
SQL> SELECT COUNT(*) FROM s.view_mat
COUNT(*)
----------
870
1 ROW selected.
-- читаем вьюху на схеме, которая смотрит на БД А
SQL> conn BA/====@E
Connected AS BA@E
SQL> SELECT COUNT(*) FROM s.view_mat
SELECT COUNT(*) FROM s.view_mat
*
-- отлуп
ERROR AT line 1
ORA-00942: таблица или представление пользователя не существует
-- читаем вьюху на обычной схеме B@E
SQL> conn B/====@E
Connected AS B@E
SQL> SELECT COUNT(*) FROM s.view_mat
COUNT(*)
----------
870
1 ROW selected.
-- читаем вьюху на схеме, которая смотрит на БД А
SQL> conn BA/====@E
Connected AS BA@E
SQL> SELECT COUNT(*) FROM s.view_mat
-- все ок
COUNT(*)
----------
870
1 ROW selected.
K790
Дата: 16.09.2015 13:22:34
andreymx,
покажите определение ====@E
также возможно влияние трассировки event= "22827 trace name context forever, level 1"
andreymx
Дата: 16.09.2015 18:10:15
andreymx |
---|
такая вот схема: БД А => есть VIEW ra.view_obs => выданы гранты на схему L@A with grant option БД E => есть VIEW s.view_mat(внутри таблицы БД E + ra.view_obs@A по паблик линку на L@A) выданы гранты для чтения view_mat на схему BA@E with grant option
И всё это работало два года И всё это перестало работать вчера вечером при заходе в БД А читаем select * from s.view_mat@link_схему_BA_в БД_E получаем ORA-00942 Если пересобрать VIEW s.view_mat@E без ra.view_obs@A, то работает, но, ессно, неверно. Сделал промежуточное решение - создал таблицу s.view_obs@e as select * from ra.view_obs@A; Так работает
|
похоже на оракловый сцукоглюк
--в VIEW s.view_mat поменял в самом внешнем запросе конструкцию
WHERE sel.id_kp NOT IN (SELECT id_k FROM s.N WHERE prizn IN (13)
UNION
SELECT id_d FROM s.N WHERE prizn IN (4))
-- на
WHERE sel.id_kp NOT IN (SELECT id_k FROM s.N WHERE prizn IN (13))
AND sel.id_kp NOT IN (SELECT id_d FROM s.N WHERE prizn IN (4))
и ошибка ушла
кстати, как раз вчера в другой вьюхе уже думал переписать этот кусок кода
но так и не стал ближе к разгадке сабжа :(