Eu uso mod_dbd e mod_authn_dbd para proteger o acesso aos meus sites. Mas parece ser instável, poucos minutos depois de reiniciar o apache e algumas requisições feitas, a autenticação não funciona mais com esta mensagem no log de erros do apache:
[authn_dbd:error] [pid 21308] [client xxxxx] AH01656: Query execution error looking up 'mylogin' in database []
Edite o log do apache com mais detalhes:
[authz_core:debug] [pid 9307] mod_authz_core.c(809): [client x.x.x.x] AH01626: authorization result of Require dbd-group mygroup: denied (no authenticated user yet)
[authn_dbd:error] [pid 9307] [client x.x.x.x] AH01656: Query execution error looking up 'mylogin' in database []
[core:trace3] [pid 9307] request.c(119): [client x.x.x.x] auth phase 'check user' gave status 500: /private
e no log de erro do mysql:
[Note] Aborted connection 5000 to db: 'httpauthdb' user: 'httpauth' host: 'xxx.xxx.xxx.xxx' (Got an error reading communication packets)
Eu tenho que reiniciar o apache para que ele funcione, mas não por muito tempo. Descobri que definir DBDPersist (em dbd conf) como Off resolve meu problema, mas não é recomendado fazer isso de acordo com a documentação do apache.
Editar : Consultar o mesmo banco de dados com o cliente mysql funciona, mesmo depois de ocorrer um erro.
Aqui um pedaço de configuração em um vhost:
<Location /private>
AuthName 'My private space'
AuthType Basic
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT password FROM clients WHERE username = %s"
AuthzDBDQuery "SELECT groups FROM clients WHERE username = %s"
Require dbd-group mygroup
</Location>
Aqui meu dbd_mysql.conf carregado pelo apache
DBDriver mysql
DBDParams "sock=/var/run/mysqld/mysqld.sock,user=httpauth,dbname=httpauthdb,pass=xxxxxxxx"
DBDMin 4
DBDKeep 2
DBDMax 10
DBDExptime 300
DBDPersist On
O resultado do apachectl -V:
Server version: Apache/2.4.25 (Debian)
Server built: 2017-01-25T22:59:26
Server's Module Magic Number: 20120211:67
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
e versão do mysql:
mysql Ver 14.14 Distrib 5.7.17-13, for debian-linux-gnu (x86_64) using 6.3
Alguma idéia sobre a origem do problema?