Apache Module mod_dbd
| Description: | Управление подключениями к базам данных SQL |
|---|---|
| Status: | Расширение |
| Module Identifier: | dbd_module |
| Source File: | mod_dbd.c |
| Compatibility: | Версия 2.1 и более поздние |
Summary
mod_dbd управляет подключениями к базам данных SQL с помощью APR. Модуль предоставляет подключения к базам данных по запросу модулям, требующим функций SQL, и заботится о управлении базами данных с оптимальной эффективностью и масштабируемостью как для поточных, так и для непоточных MPM. Подробности см. на сайте APR и в этом обзоре Apache DBD Framework, написанном его первоначальным разработчиком.
Пулы подключений
Этот модуль управляет подключениями к базам данных, оптимизированными для платформы. На непоточных платформах он предоставляет постоянное подключение в стиле классического LAMP (Linux, Apache, Mysql, Perl/PHP/Python). На поточных платформах он предоставляет значительно более масштабируемый и эффективный пул подключений, как описано в этой статье на ApacheTutor. Обратите внимание, что mod_dbd заменяет модули, представленные в этой статье.
Подключение
Для подключения к вашей базе данных вам необходимо указать драйвер и параметры подключения. Они различаются в зависимости от используемого движка базы данных. Например, для подключения к mysql выполните следующие действия:
DBDriver mysql DBDParams host=localhost,dbname=pony,user=shetland,pass=appaloosa
Затем вы можете использовать это подключение в различных других модулях, включая mod_rewrite, mod_authn_dbd, и mod_lua. Дополнительные примеры использования приведены в документации каждого из этих модулей.
См. DBDParams для получения информации о строках подключения для каждого поддерживаемого драйвера базы данных.
API Apache DBD
mod_dbd экспортирует пять функций для использования другими модулями. API выглядит следующим образом:
typedef struct {
apr_dbd_t *handle;
apr_dbd_driver_t *driver;
apr_hash_t *prepared;
} ap_dbd_t;
/* Export functions to access the database */
/* acquire a connection that MUST be explicitly closed.
* Returns NULL on error
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
/* release a connection acquired with ap_dbd_open */
AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
/* acquire a connection that will have the lifetime of a request
* and MUST NOT be explicitly closed. Return NULL on error.
* This is the preferred function for most applications.
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
/* acquire a connection that will have the lifetime of a connection
* and MUST NOT be explicitly closed. Return NULL on error.
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
/* Prepare a statement for use by a client module */
AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
/* Also export them as optional functions for modules that prefer it */
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 подготовленные запросы
mod_dbd поддерживает SQL подготовленные запросы от имени модулей, которые могут их использовать. Каждый подготовленный запрос должен быть назначен имя (метка), и они хранятся в хеше: поле prepared объекта ap_dbd_t. Элементы хеша имеют тип apr_dbd_prepared_t и могут быть использованы в любом из apr_dbd подготовленных запросов SQL или команд выборки.
Модули-пользователи dbd должны использовать подготовленные запросы и документировать, какие запросы могут быть указаны в httpd.conf, или предоставить собственные директивы и использовать ap_dbd_prepare.
Примечание
При использовании подготовленных запросов с базой данных MySQL предпочтительно установитьreconnect в 0 в строке подключения, чтобы избежать ошибок, возникающих из-за того, что клиент MySQL подключается повторно без правильного сброса подготовленных запросов. Если установлено значение 1, любые прерванные подключения будут пытаться восстановить, но так как mod_dbd не получает об этом информацию, подготовленные запросы будут недействительными. ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
Любое веб/базовое приложение должно защищаться от атак с использованием SQL-инъекций. В большинстве случаев Apache DBD безопасен, так как приложения используют подготовленные запросы, а недоверенные данные используются только как данные. Конечно, если вы используете его через модули сторонних разработчиков, убедитесь в принятых ими мерах предосторожности.
Однако драйвер FreeTDS изначально небезопасен. Базовая библиотека не поддерживает подготовленные запросы, поэтому драйвер эмулирует их, и недоверенные данные включаются в SQL-запрос.
Его можно сделать безопасным, удаляя все входные данные: процесс, вдохновленный проверкой наличия вредоносных данных в Perl. Каждый входной параметр проверяется на соответствие регулярному выражению, и используется только совпадение, в соответствии с приемом Perl:
$untrusted =~ /([a-z]+)/; $trusted = $1;Для этого регулярные выражения для удаления нежелательных данных должны быть включены в конфигурацию подготовленных запросов. Регулярное выражение следует сразу за символом % в подготовленном запросе и заключено в фигурные скобки {}. Например, если ваше приложение ожидает буквенно-цифровые данные, вы можете использовать:
"SELECT foo FROM bar WHERE input = %s"
с другими драйверами, и ничего хуже, чем неудачный запрос, не произойдёт. Но с FreeTDS вам понадобится:
"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"Теперь все, что не соответствует совпадению $1 в регулярном выражении, отбрасывается, поэтому запрос безопасен.
Альтернативой этому может быть драйвер ODBC сторонних разработчиков, который обеспечивает безопасность истинных подготовленных запросов.
Директива DBDExptime
| Description: | Время ожидания для неактивных подключений |
|---|---|
| Syntax: | DBDExptime time-in-seconds |
| Default: | DBDExptime 300 |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Установите время для поддержания активных неактивных подключений, когда количество подключений, указанных в DBDKeep, было превышено (только для поточных платформ).
Директива DBDInitSQL
| Description: | Выполнение SQL-запроса после подключения к базе данных |
|---|---|
| Syntax: | DBDInitSQL "SQL statement" |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Модули, которые этого хотят, могут иметь один или несколько SQL-запросов, выполняемых при создании подключения к базе данных. Например, это может быть инициализация определенных значений или добавление записи в журнал при подключении к базе данных.
Директива DBDKeep
| Description: | Максимальное количество поддерживаемых подключений |
|---|---|
| Syntax: | DBDKeep number |
| Default: | DBDKeep 2 |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Установите максимальное количество подключений на процесс для поддержания, кроме обработки пиковых нагрузок (только для поточных платформ).
Директива DBDMax
| Description: | Максимальное количество подключений |
|---|---|
| Syntax: | DBDMax number |
| Default: | DBDMax 10 |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Установите максимальное количество подключений на процесс (только для поточных платформ).
Директива DBDMin
| Description: | Минимальное количество подключений |
|---|---|
| Syntax: | DBDMin number |
| Default: | DBDMin 1 |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Установите минимальное количество подключений на процесс (только для поточных платформ).
Директива DBDParams
| Description: | Параметры подключения к базе данных |
|---|---|
| Syntax: | DBDParams param1=value1[,param2=value2] |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Как требуется соответствующим драйвером. Как правило, это используется для передачи того, что не может быть задано по умолчанию, среди имени пользователя, пароля, имени базы данных, имени хоста и номера порта для подключения.
Параметры строки подключения для текущих драйверов включают:
- FreeTDS (для MSSQL и SyBase)
- username, password, appname, dbname, host, charset, lang, server
- MySQL
- host, port, user, pass, dbname, sock, flags, fldsz, group, reconnect
- Oracle
- user, pass, dbname, server
- PostgreSQL
- Строка подключения передается непосредственно в
PQconnectdb - SQLite2
- Строка подключения разделяется по двоеточию, и
part1:part2используется какsqlite_open(part1, atoi(part2), NULL) - SQLite3
- Строка подключения передается непосредственно в
sqlite3_open - ODBC
- datasource, user, password, connect, ctimeout, stimeout, access, txmode, bufsize
Директива DBDPersist
| Description: | Использовать постоянные подключения |
|---|---|
| Syntax: | DBDPersist On|Off |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Если установлено значение Off, постоянные и пули подключений отключены. При запросе клиентом открывается новое подключение к базе данных, а при освобождении - сразу закрывается. Этот параметр предназначен для отладки и серверов с низкой загрузкой.
По умолчанию включен пул постоянных подключений (или единственное постоянное подключение в стиле LAMP для непоточных серверов), и он почти всегда должен использоваться в работе.
До версии 2.2.2 эта директива принимала только значения 0 и 1 вместо Off и On, соответственно.
Директива DBDPrepareSQL
| Description: | Определить подготовленный SQL-запрос |
|---|---|
| Syntax: | DBDPrepareSQL "SQL statement" label |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Для модулей, таких как аутентификация, которые многократно используют один SQL-запрос, оптимальная производительность достигается при подготовке запроса при запуске, а не каждый раз при его использовании. Эта директива подготавливает SQL-запрос и присваивает ему метку.
Директива DBDriver
| Description: | Указать драйвер SQL |
|---|---|
| Syntax: | DBDriver name |
| Context: | конфигурация сервера, виртуальный хост |
| Status: | Расширение |
| Module: | mod_dbd |
Выбирает драйвер apr_dbd по имени. Драйвер должен быть установлен на вашей системе (на большинстве систем это общий объект или dll). Например, DBDriver mysql выберет драйвер MySQL в apr_dbd_mysql.so.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_dbd.html