SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Ошибка при выполнении execute statement в триггере на соединении
Ошибка при выполнении execute statement в триггере на соединении [сообщение #6147] Thu, 10 July 2025 21:22 Переход к следующему сообщению
dedRasta в настоящее время не в онлайне  dedRasta
Сообщений: 1
Зарегистрирован: July 2025
Junior Member
При конвертации БД Firebird v.2.5.9 в Firebird v. 5.0.2 столкнулся со следующей проблемой:

В БД DB5 (скрипт DB5.sql) есть триггер на соединение (CONN_BI0). Этот триггер копирует данные из таблицы MON$ATTACHMENTS в таблицу CHG_CONN другой БД - LOG__DB5 (скрипт LOG_DB5.sql).
Эта конструкция благополучно работала лет 20, начиная с Firebird v. 2.0. Но в Firebird v. 5.0.2 при попытке соединения выдает ошибку "Error reading data from the connection"  (Error.jpg|)В логе появляется сообщение:

=================================================
mycomp Wed Jul  9 12:26:08 2025

Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.
==================================================
С ключом nodbtriggers соединение уставливается без проблем.
Код из триггера выполняется после соединения из Execute Block также без проблем.

OS Win7-x64
Firebird устанавливал из zip, также x64, для IBExpert использовал клиент x86 - результат тот же, что и при использовании isql x64.

Александр Редько
  • Вложение: DB5.sql
    (Размер: 7.10KB, Загружено 12 раз)
  • Вложение: Error.jpg
    (Размер: 27.32KB, Загружено 21 раз)
  • Вложение: ExecuteBlock.sql
    (Размер: 4.39KB, Загружено 9 раз)
  • Вложение: LOG_DB5.sql
    (Размер: 5.61KB, Загружено 9 раз)
Re: Ошибка при выполнении execute statement в триггере на соединении [сообщение #6157 является ответом на сообщение #6147] Fri, 11 July 2025 13:18 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 191
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
dedRasta писал(а) Fri, 11 July 2025 02:22
В БД DB5 (скрипт DB5.sql) есть триггер на соединение (CONN_BI0).
Этот триггер копирует данные из таблицы MON$ATTACHMENTS
Безотносительно всего остального - не надо так делать. Вообще и никогда.
Любое обращение к любой MON$-таблице запускает создание снимка данных для всех MON$-таблиц.
Это и раньше не было подарком, а в пятёрке добавляются ещё и данные для mon$compiled_statements.

P.S.
Прочтите, таки уже:
doc/sql.extensions/README.context_variables.txt
doc/sql.extensions/README.context_variables2.txt
и сохраняйте необходимый минимум.
Re: Ошибка при выполнении execute statement в триггере на соединении [сообщение #6163 является ответом на сообщение #6147] Sat, 12 July 2025 01:15 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 380
Зарегистрирован: August 2022
Senior Member
Проблему воспроизвел.
Отдельно замечу

1. То, что написано в DB5.SQL
  execute statement (:S)
    (:p02,:p03,:p04,:p05,:p06,:p07,:p08,:p09,:p10,:p11,:p13,:p14,:p15, p16,:p17,:p18,:p19,:p20,:p21,:p22,:p23,:p24,:p25,p26,:p27,:p28,:p29,:p30)
    as user CURRENT_USER
    on external data source 'localhost/3055:LOG_DB5'
    with caller privileges
    into :curr_conn_id;
в принципе никак не может работать, ибо юзер указан (CURRENT_USER), а пароль - нет.

2. with caller privileges не имеет ровно никакого смысла для внешних коннектов.

3. В ExecuteBlock.sql используется другой код
  execute statement (:S)
    (:p02,:p03,:p04,:p05,:p06,:p07,:p08,:p09,:p10,:p11,:p13,:p14,:p15, p16,:p17,:p18,:p19,:p20,:p21,:p22,:p23,:p24,:p25,p26,:p27,:p28,:p29,:p30)
    on external data source 'LOG_DB'
    into :curr_conn_id;
который уже не содержит этих ошибок.

4. про триггер DISCONN_BI0 я вообще не буду говорить
Re: Ошибка при выполнении execute statement в триггере на соединении [сообщение #6164 является ответом на сообщение #6163] Sat, 12 July 2025 01:38 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 87
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
hvlad писал(а) Fri, 11 July 2025 22:15

в принципе никак не может работать, ибо юзер указан (CURRENT_USER), а пароль - нет.
Цитата:
- if PASSWORD clause is omitted then
a) if <user_name> is omitted, NULL or equal to CURRENT_USER value and
if <role_name> is omitted, NULL or equal to CURRENT_ROLE value
then trusted autentication is performed, and
a1) for current connection (ON EXTERNAL DATA SOURCE is omitted) -
CURRENT_USER/CURRENT_ROLE is effective user account and role
a2) for local database (<connection_string> refers to the current database) -
CURRENT_USER/CURRENT_ROLE is effective user account and role
a3) for remote database - operating system account under which engine
process is currently run is effective user account.
b) else isc_dpb_user_name (if <user_name> is present and not empty) and isc_dpb_sql_role_name
  (if <role_name> is present and not empty) will be filled in DPB and native autentication
  is performed.
Re: Ошибка при выполнении execute statement в триггере на соединении [сообщение #6165 является ответом на сообщение #6164] Sat, 12 July 2025 02:19 Переход к предыдущему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 380
Зарегистрирован: August 2022
Senior Member
Что сказать-то хотел ? Smile
Что у него на сервере заведен SQL аккаунт для OS аккаунта сервера ?
Или просто хочешь мне мою доку процитировать ? Smile
Предыдущая тема: WinServ2025+FB5=RandomBag
Следующая тема: Полнотекстовый поиск для Firebird
Переход к форуму:
  


Текущее время: Sat Jul 12 21:15:44 GMT+3 2025

Общее время, затраченное на создание страницы: 0.01219 секунд