Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращаясь к старому вопросу / 10 сообщений из 10, страница 1 из 1
12.10.2006, 16:07
    #34051128
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Заданному вот здесь .
В общем ситуация следующая (я понимаю что запутанно, но увы - что имеем):

Есть две базы А и Б.
В базе А есть таблица. На нее - триггер. Из этого триггера вызывается процедура (тоже находящаяся в базе А), которая напрямую обращается к таблице в базе Б (то есть делает DELETE FROM Б:бла-бла-бла). На таблице в базе Б тоже есть триггер. И из него происходит попытка вызова другой процедуры из базы Б. Которая заканчивается обломом с текстом "Can't resolve procedure name ...". Причем для пользователя informix все хорошо...
Скажите, патриархи, что может быть причиной проблемы?
И еще (я понимаю что это, скорее, шаманство, но тем не менее) - может ли помочь следующий финт: в базе Б создать процедуру и из триггера (на таблице в А) вызывать ее, а не делать прямого обращения к таблице?

Прочитал еще раз - идиоты на марше, называется! Но мне уже деваться некуда :((
...
Рейтинг: 0 / 0
12.10.2006, 16:21
    #34051189
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Евгений Фадеев Заданному вот здесь .
В общем ситуация следующая (я понимаю что запутанно, но увы - что имеем):

Есть две базы А и Б.
В базе А есть таблица. На нее - триггер. Из этого триггера вызывается процедура (тоже находящаяся в базе А), которая напрямую обращается к таблице в базе Б (то есть делает DELETE FROM Б:бла-бла-бла). На таблице в базе Б тоже есть триггер. И из него происходит попытка вызова другой процедуры из базы Б. Которая заканчивается обломом с текстом "Can't resolve procedure name ...". Причем для пользователя informix все хорошо...
Скажите, патриархи, что может быть причиной проблемы?
И еще (я понимаю что это, скорее, шаманство, но тем не менее) - может ли помочь следующий финт: в базе Б создать процедуру и из триггера (на таблице в А) вызывать ее, а не делать прямого обращения к таблице?

Прочитал еще раз - идиоты на марше, называется! Но мне уже деваться некуда :((
ошибка -674 Routine <routine-name> cannot be resolved возникает не только в том случае, когда процедура не существует, но также если у пользователя на нее нет прав.
А пользователь informix что делает - вызывает триггер на таблицу в базе А?
Кто владелец триггера? Кто владелец процедуры, вызывающейся из триггера? Какие у него права в базе Б? И кто в базе Б владелец триггера и процедуры?
И еще - какая у вас версия Informix?
...
Рейтинг: 0 / 0
12.10.2006, 16:50
    #34051334
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Всего много, поэтому - по пунктам:
Таношибка -674 Routine <routine-name> cannot be resolved возникает не только в том случае, когда процедура не существует, но также если у пользователя на нее нет прав.Про это я в курсе. Более того - в данном случае проблема именно в отстутствии прав. Другое дело - почему?
ТанА пользователь informix что делает - вызывает триггер на таблицу в базе А?Имеется в виду - проводит ту же последовательность действий.
ТанКто владелец триггера?Informix.
ТанКто владелец процедуры, вызывающейся из триггера?Informix. Но EXECUTION GRANT TO PUBLIC.
ТанКакие у него права в базе Б?DB owner (насколько я понимаю)
ТанИ кто в базе Б владелец триггера и процедуры?Informix. Тоже EXECUTION GRANT TO PUBLIC.
ТанИ еще - какая у вас версия Informix?9.4
...
Рейтинг: 0 / 0
12.10.2006, 17:19
    #34051468
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
права пользователям раздаются через роли?
...
Рейтинг: 0 / 0
12.10.2006, 17:24
    #34051492
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Журавлев Денисправа пользователям раздаются через роли?Нет
...
Рейтинг: 0 / 0
12.10.2006, 17:24
    #34051496
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
вообще-то триггер исполняется от имени его владельца, и именно владельцу триггера нужны права на исполнение процедуры

Вы говорите, пользователем informix все нормально. Значит у простого не работает?
Какие у простого пользователя права в базе Б?
Вы на примере воспроизвести можете? Поиграйтесь с владельцами, правами

А еще может быть вариант - в вызове процедуры неправильные типы параметров указаны.
В 9.4 можно создавать процедуры с одинаковым именем, только у них типы параметров должны быть разные. При вызове он ищет процедуру, типы параметров которой соответствуют типам параметров в вызове
...
Рейтинг: 0 / 0
12.10.2006, 17:27
    #34051516
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Тан...
А еще может быть вариант - в вызове процедуры неправильные типы параметров указаны.
...От dba все работает.
...
Рейтинг: 0 / 0
13.10.2006, 10:46
    #34052815
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
echo "create database a in dev1;
grant connect  to test;
create table t1 (f int);
"|dbaccess sysmaster

echo "create database b in dev1;
create table tb1 (f int);
create table tb2 (f int);
create PROCEDURE test();
 insert into  tb2  values (1);
END PROCEDURE;

database a;
create trigger tr1 insert on t1 referencing new as inserted
for each row
 ( insert into  b:tb1  values (1));

database b;

create trigger tr2 insert on tb1 referencing new as inserted         
for each row
 ( insert into  tb2  values (111));
"|dbaccess sysmaster

echo "grant insert on t1  to test"|dbaccess a

коннектимся test\test@a insert into t1 values ( 100 );

echo "select * from tb2;"|dbaccess b
Database selected.
          f
         111 
 1  row(s) retrieved.
Database closed.

IBM Informix Dynamic Server Version  10 . 00 .UC3

На 10.00.TC3 все тоже самое.
...
Рейтинг: 0 / 0
13.10.2006, 11:02
    #34052886
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
тьфу, пить надо меньше.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
echo "drop trigger tr2;
create trigger tr2 insert on tb1 referencing new as inserted          
for each row
 ( execute procedure test());         
"|dbaccess b

коннектимся test\test@a insert into t1 values ( 100 );


echo "select * from tb2;"|dbaccess b
Database selected.
          f
         111 
           1 
 2  row(s) retrieved.
Database closed.
...
Рейтинг: 0 / 0
13.10.2006, 11:29
    #34052975
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращаясь к старому вопросу
но информикс это что-то с чем-то, обожаю индусов.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
echo "connect to 'a' USER test; insert into t1 values (100);"|dbaccess sysmaster
Database selected.

   201 : A syntax error has occurred.
Error in line  1 
Near character position  24 

   206 : The specified table (t1) is not in the database.
   111 : ISAM error:  no record found.
Error in line  1 
Near character position  42 

Database closed.



echo "connect to 'a' USER test fsdfsgdgfgh; insert into t1 values (100);"|dbaccess sysmaster
Database selected.
   ENTER PASSWORD:
Disconnected.
Connected.
 1  row(s) inserted.
Disconnected.

fsdfsgdgfgh -- бессмысленный набор символов. 10.00.UC3 Линукс.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращаясь к старому вопросу / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]