MySQL 로그인 시도 기록


25

때때로 MySQL 프로덕션 서버에서 로그인 시도가 실패합니다 (MySQL 대시 보드가 경고합니다). 활성화하지 않고 모든 성공 및 실패한 로그인을 MySQL 서버에 기록하는 방법이 general_log있습니까?

general_log부하가 많은 프로덕션 서버이기 때문에 옵션이 아니라고 생각 합니다.


1
MariaDB 감사 플러그인 mariadb.com/resources/blog/… 사용을 고려하십시오. mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin
Mersh

mysql official에 따르면 : As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. 진취적인 버전 만 있습니다.
Tiina

답변:


20

궁금한 점을 알려주기 위해 오류 로그를 파헤 치십시오!

(1). my.cnf 편집 (설정 문서는 여기 참조 )

[mysqld]

: # 오류 로그 파일의 이름을 입력하십시오. 그렇지 않으면 기본 이름이 사용됩니다.

log_error = / var / log / mysql / error

: #defaults는 1입니다. 값이 1보다 크면 연결이 중단되고 새 연결 시도에 대한 액세스 거부 오류가 오류 로그에 기록됩니다.

log_warnings = 2

...

(2). 명령 실행시

$ sudo cat /var/log/mysql/error.err | egrep '[aA] 세스 거부'

(삼). 그리고 당신은 그것을 가지고 있습니다!

(4). 사용자를 제한해야하는 경우 (다중 사용자 데이터베이스에서 공격 또는 mysql 사용자 비밀번호 복구 시도), ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> GRANT USAGE ON *. * MAX_CONNECTIONS_PER_HOUR 100으로 '공격자'@ 'localhost';

시간당 100 회 암호 복구 시도로 제한합니다.


2

일반 로그는 다른 많은 로그인 시도 (성공 및 실패)를 기록 할 수 있다고 생각합니다. 주요 문제점은 일반 로그가 데이터베이스 성능에 영향을 미친다는 것입니다. 쿼리로 일반 로그를 켤 수 있습니다

SET GLOBAL general_log = 'on'

최신 버전의 MySQL.


임시 또는 영구적입니까? 임시 인 경우 /etc/mysql/my.cnfmysql 을 수정해야 합니까?
DarckBlezzer

일시적입니다. 이 방법은 효과가 있거나 --general-logMySQL을 시작할 때 플래그를 추가 할 수 있습니다 .
rmc00

1

안녕하세요, 가능하지 않다고 생각합니다.

mysql 5.1.29부터는 스토리지 옵션 (테이블 또는 파일)과 위치 및 원하는 로그 (오류, 일반, 이진 또는 느린 쿼리)를 지정할 수 있습니다. 내가 아는 한-로그 형식이나 기록 대상을 지정할 수 없습니다. 나는 틀릴 수도 있지만 모든 로그인 시도는 오류 로그가 아닌 일반 로그에 기록 될 것이라고 생각합니다.

그러나 mysql 서버가 별도의 시스템에서 실행되고 응용 프로그램 서버와 포트 3306 (또는 무엇이든)이 필요하고 ssh 터널을 사용할 수 없다고 가정하면 mysql 서버는 여전히 누구도 액세스 할 수 없습니다. 닐리 나는 그것을 웹 트래픽에 노출시키지 말 것을 강력히 권장합니다 (방화벽 뒤에 있지 않은 곳에있는 경우와 같이) 응용 프로그램 서버의 IP 주소 또는 IP 블록과 관리자 액세스 IP (당신이있는 곳)에 바인딩해야합니다 에서 액세스)

희망이 도움이됩니다.


1

mysql-audit-plugin을 사용하여 로그 connectquit명령을 수행 할 수 있습니다 .

  1. mysql-audit-plugin release 에서 올바른 버전을 찾으십시오. 나는 mysql 5.7을 사용했기 때문에을 사용했습니다 audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. 다운로드 한 so파일을에서 지정한 위치 로 재배치하십시오 mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. 로그 기능을 켜면 mysql>set global audit_json_file=ON기본적으로 모든 성공적인 작업을 기록합니다. mysql-audit-plugin configurationset global audit_record_cmds='quit,connect' 에 따르면 로그 를 설정 하면 연결 만 종료 됩니다.

다음은 파일에서 로그인 및 로그 아웃하는 방법입니다.

{"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"}

0

문제의 서버에 구성된 외부 연결이 없어야하는 경우 사용자 / 패스가 구성되기 전에 새로운 응용 프로그램이 롤아웃되지 않은 경우 로그인하지 않으면 앱 서버에 대한 일종의 공격에 대해 걱정할 것입니다.

의도적이지 않고 필요하지 않은 한 서버가 3306에서 외부 연결에 노출되는 경우 Nick이 말한대로 구성을 설정하고 iptables를 사용하여 응용 프로그램 서버에서 트래픽을 3306으로 제한하는 방법도 살펴보십시오.


MySQL은 mysql.user에 적어도 하나의 일치하는 행이없는 IP 주소의 연결을 자동으로 거부합니다
David M

0

에서는 http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ 저자는 문자열에 기초하여 출력을 tcpdump를 사용하고, 필터링 된 패킷을 캡처 할 수있는 방법을 나타내고있다.

tcpdump 자체가 약간의 성능 저하를 초래할 수 있지만 general_log 및 성능과 관련된 문제를 해결합니다. 이 솔루션은 일반 쿼리 로그보다 적은 데이터를 기록합니다.

나는 이것을 직접 사용하지는 않았지만 매우 유용하게 들린다.


잘 들리지만 링크가 작동하지 않습니다.
CarlosH

이 링크는 오늘 아침 Firefox를 사용하여 작동합니다. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

그리고 나는 이것에 대한 당신의 경험을 듣고 싶습니다.
Stefan Lasiewski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.