MySQL giriş girişimlerini günlüğe yaz


25

Zaman zaman MySQL üretim sunucumuzda oturum açma girişimleri başarısız oldu (MySQL kontrol paneli bizi uyarıyor). Her bir başarıyı günlüğe kaydetmenin ve MySQL sunucusuna giriş yapmadan başarısız giriş yapmanın bir yolu var mı general_log?

general_logYüksek yüke sahip bir üretim sunucusu olduğu için bir seçenek olmadığını düşünüyoruz .



MySQL resmi göre: As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. Sadece girişimci sürümü var.
Tiina

Yanıtlar:


20

sadece meraklı olanı bilgilendirmek için: hata günlüğünüzü kazın ve presto!

(1). düzenleme my.cnf ( Burada Ayarlar belgeleri bulundu )

[Mysqld]

: # Hata günlük dosyası için bir ad girin. Aksi takdirde varsayılan bir ad kullanılacaktır.

log_error = / var / log / mysql / hata

: #defaults 1 değerinde> 1 ise, iptal edilen bağlantılar ve yeni bağlantı denemeleri için erişim reddedilen hatalar hata günlüğüne yazılır.

log_warnings = 2

...

(2). komut çalıştırıldığında

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

(3). ve sende var!

(4). kullanıcıyı kısıtlamanız gerekiyorsa (çok kullanıcılı bir veritabanında dos saldırısı veya mysql kullanıcı şifresi kurtarma girişimi), sonra ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> HESAP KULLANIMI AÇIK *. * MAX_CONNECTIONS_PER_HOUR 100 İLE 'saldırgan' @ 'localhost';

saatte yalnızca 100 parola kurtarma girişimini kısıtlamak için.


2

Genel kütüğün diğer birçok şeyin yanı sıra tüm giriş denemelerini (başarılı ve başarısız) kaydedebileceğini düşünüyorum. Asıl sorun, genel kayıtların veritabanınızın performansını etkilemesi. Sorgu ile genel günlüğü açabilirsiniz

SET GLOBAL general_log = 'on'

MySQL'in daha yeni sürümleri için.


Bu geçici mi yoksa kalıcı mı? Geçici ise /etc/mysql/my.cnf, mysql'de değişiklik yapmam gerektiği anlamına mı geliyor?
DarckBlezzer 10:17

Geçici. Bu yaklaşım işe yarayabilir veya --general-logMySQL'i başlattığınızda bayraklara ekleyebilirsiniz .
rmc00

1

Merhaba, bunun mümkün olduğunu sanmıyorum.

MySQL 5.1.29'dan itibaren - depolama seçeneği (tablo veya dosya) ve konum ve hangi günlüğü istediğiniz belirtebilirsiniz - hata, genel, ikili veya yavaş sorgu. Bildiğim kadarıyla - günlük biçimini veya günlüğe ne gireceğini belirtemezsiniz. Yanılıyor olabilirim - ama tüm oturum açma çalışmalarının genel logda günlüğe kaydedileceğini düşünüyorum, hatayı değil.

Bununla birlikte, mysql sunucunuzun, uygulama sunucunuzdan ayrı bir makinede çalıştığını ve 3306 numaralı bağlantı noktasını (veya her neyse) açmanız gerektiğini ve ssh tüneli kullanamayacağınızı varsayarak, mysql sunucusuna yine de erişemezsiniz. ister istemez. Web trafiğine maruz bırakmamanızı şiddetle tavsiye ederim ve eğer (güvenlik duvarınızın arkasında olmayan bir yerde ikamet etmeniz durumunda), uygulama sunucunuzun ip adresine veya ip bloğuna ve yönetici erişim ipinize (bulunduğunuz yer) erişen)

Umarım yardımcı olur.


1

Biri mysql-audit-plugin kullanarak log connectve quitkomut yapabilir .

  1. Mysql-audit-plugin sürümünden doğru sürümü bulun, mysql 5.7 kullandım, bu yüzden kullandım audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. indirilen sodosyayı tarafından verilen yere yerleştirin mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. log işlevini açmak, mysql>set global audit_json_file=ONvarsayılan olarak tüm başarılı işlemleri kaydeder. ayarlayarak set global audit_record_cmds='quit,connect'günlükleri sadece mysql-audit-plugin yapılandırmasına göre sanırım bağlanır ve çıkar .

Giriş ve çıkış için nasıl göründüğü:

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

Söz konusu sunucunun dış bağlantılara sahip olmaması gerekiyorsa, yapılandırıldığı gibi, başarısız oturum açma işlemleri kullanıcı / geçiş yapılandırılmadan önce yeni uygulamalardan başlatılmamışsa uygulama sunucunuza yönelik bir tür saldırı konusunda endişelenirim.

Eğer sunucu bir şekilde 3306'daki dış bağlantılara maruz kalırsa, kasıtlı ve gerekli olmadıkça, yapılandırmayı Nick'in söylediği gibi ayarlarım ve trafiği sadece uygulama sunucularınızdan gelen trafiği 3306 ile sınırlandırmak için iptables kullanmaya bakardım.


MySQL, mysql.user içinde en az bir eşleşen satır bulunmayan IP adreslerinden gelen bağlantıları otomatik olarak reddeder
David M

0

At http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ , yazar dize dayalı çıkış tcpdump kullanarak ve filtreleme paketleri yakalamak için bir yöntem gösterir.

Bu, general_log ve performans konusundaki endişelerinizi giderir, ancak tcpdump küçük bir performans cezasına neden olabilir. Bu çözüm ayrıca Genel Sorgu Günlüğü'nden daha az veri kaydeder.

Bunu kendim kullanmadım, ama çok kullanışlı görünüyor.


Kulağa hoş geliyor, ancak bağlantı benim için çalışmıyor.
CarlosH

Bağlantı, bu sabah benim için çalışıyor, Firefox kullanıyor. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

Ve bununla ilgili deneyiminizi duymak isterim.
Stefan Lasiewski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.