Logar tentativas de login no MySQL

23

Ocasionalmente, há tentativas de login com falha em nosso servidor de produção MySQL (o painel do MySQL nos alerta). Existe uma maneira de registrar cada sucesso e falha de login no servidor MySQL sem habilitar general_log ?

Achamos que general_log não é uma opção, pois é um servidor de produção com alta carga.

    
por CarlosH 14.09.2009 / 19:44

6 respostas

17

apenas para informar o curioso: entre no seu log de erros e pronto!

(1) edit my.cnf (Documentação de configurações encontrada aqui )

[mysqld]

:#Enter a name for the error log file. Otherwise a default name will be used.

log_error = /var/log/mysql/error

:#defaults to 1. If the value is > 1, aborted connections and access-denied errors for new connection attempts are written to the error log

log_warnings = 2

...

(2) no comando run

$ sudo cat /var/log/mysql/error.err | egrep '[aA]ccess denied'

(3) e você tem isso!

(4). se você precisar restringir o usuário (dos ataques ou tentativas de recuperação de senha do usuário mysql em um banco de dados multiusuário), então ( link )

mysql> GRANT USAGE ON * . * TO 'attacker'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 100;

para restringir a apenas 100 tentativas de recuperação de senha por hora.

    
por 06.12.2012 / 10:34
2

Acho que o log geral pode registrar todas as tentativas de login (sucesso e falha) entre muitas outras coisas. O principal problema é que o log geral afetará o desempenho do seu banco de dados. Você pode ativar o log geral com a consulta

SET GLOBAL general_log = 'on'

para versões mais recentes do MySQL.

    
por 06.05.2010 / 20:52
1

Oi, não acho que seja possível.

A partir do mysql 5.1.29 - você pode especificar a opção de armazenamento (tabela ou arquivo) e localização e qual log deseja - consulta de erro, geral, binária ou lenta. Tanto quanto eu sei - você não pode especificar o formato do log ou o que é registrado. Eu posso estar errado - mas acho que todas as tentativas de login serão registradas no log geral, e não no erro.

No entanto, assumindo que o seu servidor mysql está rodando em uma máquina separada, do servidor da aplicação, e você precisa da porta 3306 (ou qualquer outra) aberta e você não pode usar o túnel ssh, seu servidor mysql ainda não deve ser acessível por qualquer um querendo ou não. Eu recomendo não expô-lo ao tráfego da web, e se você precisar (como no caso de residir em algum lugar que não esteja atrás do seu firewall) vincule-o ao endereço IP ou ao bloco ip de seu servidor de aplicativos e ao seu ip de acesso de administrador acessando de)

Espero que ajude.

    
por 17.03.2010 / 17:15
0

se o servidor em questão não tiver conexões externas, conforme configurado, eu ficaria preocupado com algum tipo de ataque ao seu servidor de aplicativos, a menos que os logins com falha sejam de novos aplicativos sendo lançados antes que o usuário / passe tenha sido configurado.

se o servidor estiver exposto de alguma forma a conexões externas em 3306, a menos que isso seja intencional e necessário, eu definiria a configuração como o Nick disse e também verificaria o uso do iptables para restringir o tráfego ao 3306 apenas dos servidores do aplicativo.

    
por 12.05.2010 / 02:57
0

No link , o autor mostra um método para capturar os pacotes usando o tcpdump e filtrando a saída com base na string.

Isso trabalha em torno de suas preocupações com relação ao general_log e ao desempenho, embora o próprio tcpdump possa incorrer em uma pequena penalidade de desempenho. Esta solução também registra menos dados que o Registro de consulta geral.

Eu não usei isso sozinho, mas parece muito útil.

    
por 15.05.2010 / 00:51
0

Pode-se registrar o comando connect e quit usando o mysql-audit-plugin.

  1. Encontre a versão correta do release mysql-audit-plugin , usei o mysql 5.7, então usei audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip .
  2. mude o arquivo so baixado para o local dado por mysqladmin variables | grep plugin_dir .
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. ativando a função de log, mysql>set global audit_json_file=ON , por padrão, registra todas as operações bem-sucedidas. definindo set global audit_record_cmds='quit,connect' ele apenas conecta e encerra, suponho, de acordo com configuração mysql-audit-plugin .

É assim que aparece no arquivo para login e logout:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}
    
por 02.12.2018 / 11:22