Раздел 10. Модули Апача Пункты: 85 86 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 209 210 211 212 213 RU EN Пункт 132. Модуль Apache mod_dbd Пул соединенийЭтот модуль управляет подключениями к базе данных способом, оптимизированным для платформы. На непоточных платформах он обеспечивает постоянное соединение наподобие классического LAMP (Linux, Apache, Mysql, Perl/PHP/Python). На многопоточной платформе он обеспечивает в целом более масштабируемый и эффективный пул соединений , как описано в этой статье на ApacheTutor. Обратите внимание, что ПодключениеЧтобы подключиться к вашей базе данных, вам необходимо указать драйвер и параметры подключения. Они варьируются от одного ядра базы данных к другому. Например, чтобы подключиться к mysql, сделайте следующее: DBDriver mysql DDBParams host=localhost,dbname=pony,user=shetland,pass=appaloosa Затем вы можете использовать это соединение во множестве других модулей, включая См Апач ДБД API структура typedef { апр_дбд_т *дескриптор; apr_dbd_driver_t *водитель; apr_hash_t *подготовлено; } ap_dbd_t; /* Экспорт функций для доступа к базе данных */ /* установить соединение, которое ДОЛЖНО быть явно закрыто. * Возвращает NULL при ошибке */ AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*); /* отключаем соединение, полученное с помощью ap_dbd_open */ AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*); /* установить соединение, которое будет иметь время существования запроса * и НЕ ДОЛЖЕН быть явно закрыт. Возвращает NULL при ошибке. * Это предпочтительная функция для большинства приложений. */ AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*); /* получить соединение, которое будет иметь время существования соединения * и НЕ ДОЛЖЕН быть явно закрыт. Возвращает NULL при ошибке. */ AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*); /* Подготовить оператор для использования клиентским модулем */ AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*); /* Также экспортируйте их как необязательные функции для модулей, которые предпочитают это */ APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*)); APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*)); APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*)); APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*)); APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*)); Подготовленные операторы SQL Пользовательские модули dbd должны использовать подготовленные операторы и документировать, какие операторы могут быть указаны в apache2.conf, или предоставлять свои собственные директивы и использовать файлы ПредостережениеПри использовании подготовленных операторов с базой данных MySQL предпочтительно установить reconnect значение 0 в строке подключения, чтобы избежать ошибок, возникающих при повторном подключении клиента MySQL без надлежащего сброса подготовленных операторов. Если установлено значение 1, будут предприняты попытки исправления любых разорванных соединений, но, поскольку mod_dbd не проинформирован, подготовленные операторы будут признаны недействительными.
ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИЛюбое веб-приложение/приложение базы данных должно защищать себя от атак SQL-инъекций. В большинстве случаев Apache DBD безопасен, поскольку приложения используют подготовленные операторы, а ненадежные входные данные всегда используются только как данные. Конечно, если вы используете его через сторонние модули, вам следует выяснить, какие меры предосторожности они могут потребовать. Однако драйвер FreeTDS по своей сути небезопасен . Базовая библиотека не поддерживает подготовленные операторы, поэтому драйвер эмулирует их, а ненадежные входные данные объединяются в оператор SQL. Его можно сделать безопасным, очистив все входные данные: процесс, вдохновленный проверкой испорченности в Perl. Каждый ввод сопоставляется с регулярным выражением, и используется только совпадение в соответствии с идиомой Perl:
Чтобы использовать это, незапятнанные регулярные выражения должны быть включены в настроенные подготовленные операторы. Регулярное выражение следует сразу после % в подготовленном операторе и заключено в фигурные скобки {}. Например, если ваше приложение ожидает буквенно-цифровой ввод, вы можете использовать: с другими драйверами и не страдают ничем хуже, чем неудачный запрос. Но с FreeTDS вам понадобится: Теперь все, что не соответствует совпадению $1 в регулярном выражении, отбрасывается, поэтому инструкция безопасна. Альтернативой этому может быть сторонний драйвер ODBC, который обеспечивает безопасность подлинных подготовленных операторов. Директива DBDExptime
Установите время, в течение которого неиспользуемые соединения будут активны, когда количество соединений, указанное в DBDKeep, превышено (только для многопоточных платформ). Директива DBDInitSQL
Модули, которые этого желают, могут иметь один или несколько операторов SQL, выполняемых при создании соединения с базой данных. Примером использования может быть инициализация определенных значений или добавление записи в журнал при установлении нового подключения к базе данных. Директива DBDKeep
Установите максимальное количество поддерживаемых соединений на процесс, кроме обработки пиковой нагрузки (только для многопоточных платформ). Директива DBDMax
Установите жесткое максимальное количество подключений на процесс (только для многопоточных платформ). Директива DBDMin
Установите минимальное количество подключений на процесс (только для многопоточных платформ). Директива DDBParams
В соответствии с требованиями базового драйвера. Обычно это будет использоваться для передачи того, что не может быть по умолчанию среди имени пользователя, пароля, имени базы данных, имени хоста и номера порта для подключения. Параметры строки подключения для текущих драйверов включают:
Директива DBDPersist
Если установлено значение «Выкл.», постоянные соединения и соединения в пуле отключены. Новое соединение с базой данных открывается по запросу клиента и закрывается сразу после освобождения. Этот параметр предназначен для отладки и малоиспользуемых серверов. По умолчанию включен пул постоянных соединений (или одно постоянное соединение в стиле LAMP в случае сервера без потоков), и его почти всегда следует использовать в работе. До версии 2.2.2 эта директива принимала только значения
Директива DBDPrepareSQL
Для таких модулей, как аутентификация, которые многократно используют один оператор SQL, оптимальная производительность достигается за счет подготовки оператора при запуске, а не при каждом его использовании. Эта директива подготавливает оператор SQL и присваивает ему метку. Директива DBDriver
Выбирает драйвер apr_dbd по имени. Драйвер должен быть установлен в вашей системе (в большинстве систем это будет общий объект или dll). Например, Пункты: 85 86 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 209 210 211 212 213 |