Existe uma maneira de auditar logins no MySQL? Eu gostaria de poder criar um nome de usuário para cada funcionário e, assim, criar uma trilha de auditoria de logins. No entanto, googling não apresentou bons resultados.
Quanto mais auditarmos, melhor. No mínimo, seria bom saber quem fez login quando. Seria ainda melhor ver quem executou qual consulta quando. Os logs estão lá principalmente para informar aos clientes que os temos, pois há informações potencialmente confidenciais no banco de dados.
Obviamente, poder auditar as consultas executadas por cada usuário (e quando) também nos daria a capacidade de identificar melhor quem é a causa de um problema de segurança, caso surja.
Você provavelmente gostaria de usar o log de consulta geral .
Uma coisa importante com o registro de segurança é que um invasor não pode acessar o registro para apagar rastros de sua presença, portanto, considere arquivos somente anexados .
FWIW no Oracle podemos enviar logs automaticamente para um syslog remoto , mas não acredito que o MySQL tenha esse recurso ainda. Talvez você possa fingir com SNMP, mas eu não tentei.
A resposta de @Gauis é excelente. Para adicionar mais a ele, você pode o seguinte:
O MySQL 5.1 agora permite armazenar o log geral e o log de consulta lenta como tabelas SQL.
Adicione isto ao /etc/my.cnf:
Reinicie o mysql
Então, quando o mysqld criar o log geral, em vez de um arquivo de texto, ele criará a tabela como uma tabela CSV na pasta /var/lib/mysql/mysql (banco de dados do esquema mysql).
Basta fazer isso para ver:
Todas as conexões vão se acumular nele.
Para você, isso não é muito útil quando se trata de consultá-lo. Seria apenas uma varredura completa da tabela de cada vez.
O que fazer ??? CONVERTE PARA MyISAM e INDEX A TABELA !!!!
Opcionalmente, você pode querer colocar um índice de texto completo no campo do argumento.
Acabei de configurar o MySQL 5.5.9 em um servidor e tentei isso. Aqui está o resultado:
Agora, você pode consultar por carimbo de data/hora e procurar tokens específicos no campo de argumento.
Por exemplo, observe a linha 4 do SELECT que fiz. Meu login foi registrado no campo de argumento como
[email protected] on
. Você pode rastreá-los.E se o general ficar muito grande (acredite que vai ficar muito grande muito rápido)
O que fazer ???
BTW Uma vez que você tenha o log geral offline, você pode executá-los para coletar os logins distintos que fizeram algo no mysqld:
Eu tenho um cliente com 3 servidores DB. Cada um com DB Server tem mais de 1.000.000.000 (1 bilhão [milhares de milhões]) de linhas nele. O script acima levou cerca de 2,5 horas para ser concluído. A tabela audit_user_host acabou com 27 logins distintos.
Você deve estar pronto para ir.
Divirtam-se com este, todos !!!
Em vez de fazer tantas coisas manualmente, basta instalar o plug-in de auditoria, que fornece mais informações no nível do usuário
http://www.mysql.com/products/enterprise/audit.html
No entanto, está disponível em edições comerciais selecionadas do MySQL. Seria ótimo se qualquer fork do MySQL também fosse adicionado à edição da comunidade, para que a maioria das pessoas se beneficiasse desse recurso, caso contrário, temos que confiar na solução fornecida pelo @RolandoMySQLDBA.
@statichippo
Como instalar o log de auditoria no MySQL.
+ O registro de auditoria só suporta MySQL Enterprise
+ Você pode instalar o registro de auditoria na Comunidade MySQL:
1. Copie o arquivo audit_log.so por Você pode instalar o MySQL Enterprise Trial e, em seguida, copie o arquivo audit_log.so para a Comunidade MySQL.
2. Copie audit_log.so para plugin_dir como /usr/lib64/mysql/plugin ou você pode mostrar o diretório do plugin por:
Vá para o console mysql: mysql> mostre variáveis globais como '%plugin%';
3. Instale o log de auditoria como:
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
mysql> MOSTRAR VARIÁVEIS COMO 'audit_log%';
4. Log de auditoria de saída:
tail -f /var/lib/mysql/audit.log
Muito obrigado.