it-swarm.asia

MySQL giriş denemelerini günlüğe kaydet

MySQL üretim sunucumuzda zaman zaman başarısız giriş denemeleri oluyor (MySQL kontrol paneli bizi uyarıyor). general_log Etkinliğini etkinleştirmeden MySQL sunucusuna her başarılı ve başarısız oturum açmanın bir yolu var mı?

general_log Uygulamasının yüksek yüklü bir üretim sunucusu olması nedeniyle bir seçenek olmadığını düşünüyoruz.

25
CarlosH

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

(1). my.cnf dosyasını düzenle (Ayar belgeleri bulundu burada )

[Mysqld]

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

log_error =/var/log/mysql/hata

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

log_warnings = 2

...

(2). komutta

$ Sudo kedi /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ı parolası kurtarma girişimi), o zaman ( http://dev.mysql.com/doc/refman/5.5/en/user-resources html )

mysql> HİBE KULLANIM AÇIK *. * MAX_CONNECTIONS_PER_HOUR 100 İLE 'saldırgan' @ 'localhost';

saatte yalnızca 100 şifre kurtarma girişimiyle sınırlamak.

20
centurian

Genel günlük diğer birçok şey arasında tüm giriş denemelerini (başarılı ve başarısız) kaydedebilir düşünüyorum. Ana sorun, genel günlük veritabanınızın performansını etkileyecektir. Genel günlüğü sorgu ile açabilirsiniz.

SET GLOBAL general_log = 'on'

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

2
rmc00

Merhaba, bunun mümkün olduğunu düşünmüyorum.

Mysql 5.1.29 itibariyle - depolama seçeneğini (tablo veya dosya) ve konumu ve istediğiniz günlüğü belirtebilirsiniz - hata, genel, ikili veya yavaş sorgu. Bildiğim kadarıyla, günlük biçimini veya nelerin günlüğe kaydedileceğini belirleyemezsiniz. Yanılıyor olabilirim - ama sanırım tüm giriş denemeleri hata günlüğüne değil genel günlüğe kaydedilir.

Ancak, 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ünelini kullanamayacağınızı varsayarsak, mysql sunucunuz hala herkes tarafından erişilemez olmalıdır. 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 kalmanız durumunda), uygulama sunucunuzun ip adresine veya ip bloğuna ve yönetici erişim ipinize (nerede olduğunuzu) adresinden erişiliyor)

Umarım yardımcı olur.

1
konung

Mysql-audit-plugin kullanarak connect ve quit komutunu kaydedebilirsiniz.

  1. mysql-audit-plugin sürümünden doğru sürümü bulun, mysql 5.7 kullandım, bu yüzden audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.Zip Kullandım.
  2. indirilen so dosyasını mysqladmin variables | grep plugin_dir tarafından verilen yere yeniden yerleştirin.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. günlük işlevini açarak, mysql>set global audit_json_file=ON, varsayılan olarak tüm başarılı işlemleri günlüğe kaydeder. set global audit_record_cmds='quit,connect' ayarlanarak mysql-audit-plugin yapılandırmasına göre, yalnızca sanırım bağlanır ve çıkılır.

Giriş ve çıkış için dosyada şu şekilde görünür:

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

söz konusu sunucunun yapılandırıldığı gibi harici bağlantılara sahip olmaması gerekiyorsa, başarısız girişler kullanıcı/geçiş yapılandırılmadan önce yeni uygulamalardan alınmadığı sürece uygulama sunucunuza yönelik bir tür saldırıdan endişe duyarım.

eğer sunucu bir şekilde 3306'da dış bağlantılara maruz kalırsa, bu kasıtlı ve gerekli olmadıkça, yapılandırmayı Nick'in söylediği gibi ayarlayacak ve ayrıca sadece uygulama sunucularınızdan 3306 ile trafiği kısıtlamak için iptables kullanmaya bakacağım.

0
cpbills

http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ adresinde yazar, paketleri tcpdump kullanarak yakalamak ve çıktıya göre filtrelemek için bir yöntem gösterir dize.

Bu, tcpdump'ın kendisi küçük bir performans cezasına neden olsa da, general_log ve performansla ilgili endişelerinizi giderir. Bu çözüm aynı zamanda Genel Sorgu Günlüğünden daha az veri kaydedecektir.

Bunu kendim kullanmadım, ama kulağa çok faydalı geliyor.

0
Stefan Lasiewski