2016-11-18 2 views
0

Возможно ли выполнить запрос каждый раз при открытии нового подключения к базе данных. Этот запрос необходимо запустить сразу же после открытия соединения с базой данных, потому что этот запрос вызывает хранимую процедуру, которая устанавливает различное управление доступом в таблицах, используя сведения о пользователе, который запросил выполнить запрос. Я попытался назвать эту хранимую процедуру в разных местах, и все они успешны, но мне хотелось бы получить обратную связь.Выполнение запроса при каждом подключении к базе данных Zend FM

Я поставил этот запрос в абстрактном классе сопоставления, который расширяют другие карты. Каждый раз, когда создается экземпляр нового экземпляра, вызывается хранимая процедура.

Другое место для вызова этого вызова в хранимую процедуру до вызова других методов сопоставления. Недостатком этого является то, что будет много дубликатов кода (код, который вызывает хранимую процедуру).

Последнее место, где можно позвонить, находится в Bootstrap.php. Каждый метод _init в этом файле должен запускаться только один раз при каждом загрузке приложения. Я решил поместить этот вызов в хранимую процедуру в один из Bootstrap.php для одного из наших модулей. Это пока лучшее место, о котором я могу думать, потому что мне нужно написать код, который вызывает хранимую процедуру один раз и каждый раз, когда приложение будет доступно, будет запущен метод инициализации. Недостатком этого является то, что я не знаю, какие побочные эффекты укладываются в Bootstrap.php.

Одним из основных недостатков всех этих мест является то, что хранимая процедура вызывается много раз. Чтобы управление доступом работало, хранимая процедура должна вызываться только один раз на сеанс базы данных. Это не вызовет никаких проблем, кроме скорости из-за ненужных вызовов.

Есть ли лучшие места для вызова этого вызова в хранимую процедуру? У Zend FM эта функция реализована где-то? Есть ли что-нибудь, что мне нужно принять во внимание, если я положил его в файл Bootstrap.

Спасибо, что прочитали эту и любую предоставленную помощь.

  • DB2 Версии 10.5
  • Linux Platform
  • Зенд FM Version 2
+0

Пожалуйста, укажите версию DB2 и платформу. – mustaccio

ответ

1

В качестве альтернативы, вы можете настроить это на стороне базы данных, установив database configuration parameter connect_proc на имя хранимой процедуры , Обратите внимание, что процедура будет вызываться для всех подключений, удаленных и локальных, в том числе тех, которые сделаны администратором базы данных.

Если вам нужно передать дополнительную информацию от клиента к connect_proc рутину, вы можете использовать client accounting string connection parameter, который вы могли бы прочитать в процедуре с использованием MON_GET_CONNECTION() function:

SET acct_string = (
    SELECT client_acctng FROM TABLE (
    MON_GET_CONNECTION(MON_GET_APPLICATION_HANDLE(),-1) 
) 
) 
+0

В документе говорится, что в качестве процедуры подключения могут использоваться только процедуры с 0 параметрами. Это не сработает, потому что мы предлагаем две вещи для нашей процедуры. –

 Смежные вопросы

  • Нет связанных вопросов^_^