Dari waktu ke waktu ada upaya login yang gagal di server produksi MySQL kami (MySQL dashboard memberitahu kami). Apakah ada cara untuk mencatat setiap keberhasilan dan gagal login ke server MySQL tanpa mengaktifkan general_log
?
Kami pikir general_log
ini bukan opsi karena ini adalah server produksi dengan beban tinggi.
As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log.
Hanya versi giat yang memilikinya.Jawaban:
hanya untuk menginformasikan yang penasaran: gali log kesalahan dan presto Anda!
(1) edit my.cnf (Dokumentasi pengaturan ditemukan di sini )
(2) pada perintah dijalankan
(3) dan kamu memilikinya!
(4) jika Anda perlu membatasi pengguna (dos serangan atau upaya memulihkan kata sandi pengguna mysql dalam database multi-pengguna), kemudian ( http://dev.mysql.com/doc/refman/5.5/id/user-resources.html )
untuk membatasi hingga hanya 100 upaya pemulihan kata sandi per jam.
sumber
Saya pikir log umum mungkin mencatat semua upaya login (berhasil dan gagal) di antara banyak hal lainnya. Masalah utama adalah bahwa log umum akan mempengaruhi kinerja database Anda. Anda dapat mengaktifkan log umum dengan kueri
untuk versi MySQL yang lebih baru.
sumber
/etc/mysql/my.cnf
mysql?--general-log
ke flag ketika Anda memulai MySQL.Hai, saya rasa itu tidak mungkin.
Pada mysql 5.1.29 - Anda dapat menentukan opsi penyimpanan (tabel atau file) dan lokasi dan log mana yang Anda inginkan - kesalahan, umum, biner atau permintaan lambat. Sejauh yang saya tahu - Anda tidak dapat menentukan format log atau apa yang dicatat. Saya mungkin salah - tetapi saya pikir semua upaya login akan dicatat dalam log umum, dan bukan kesalahan.
Namun, dengan asumsi server mysql Anda berjalan pada mesin yang terpisah, dari server aplikasi Anda, dan Anda membutuhkan port 3306 (atau apa pun) terbuka dan Anda tidak dapat menggunakan ssh tunnel, Anda server mysql masih tidak dapat diakses oleh siapa pun mau- tidak ada Saya sangat menyarankan untuk tidak mengeksposnya ke lalu lintas web, dan jika Anda harus (seperti dalam kasus yang berada di suatu tempat tidak di belakang firewall Anda) mengikatnya ke alamat ip atau blok ip dari server aplikasi Anda dan ip akses admin Anda (di mana Anda berada mengakses dari)
Semoga itu bisa membantu.
sumber
Seseorang dapat login
connect
danquit
memerintahkan dengan menggunakan mysql-audit-plugin.audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip
.so
file yang diunduh ke tempat yang diberikan olehmysqladmin variables | grep plugin_dir
.mysql>install plugin audit soname 'libaudit_plugin.so'
mysql>set global audit_json_file=ON
,, secara default akan mencatat semua operasi yang berhasil. dengan mengaturnyaset global audit_record_cmds='quit,connect'
log hanya menghubungkan dan berhenti saya kira, sesuai dengan konfigurasi mysql-audit-plugin .Beginilah tampilannya dalam file untuk masuk dan keluar:
sumber
jika server yang dimaksud seharusnya tidak memiliki koneksi eksternal, seperti yang dikonfigurasikan, saya akan khawatir tentang semacam serangan terhadap server aplikasi Anda, kecuali login yang gagal berasal dari aplikasi baru yang diluncurkan sebelum pengguna / pass telah dikonfigurasi.
jika server entah bagaimana terkena koneksi luar pada 3306, kecuali jika disengaja dan diperlukan, saya akan mengatur konfigurasi seperti kata Nick, dan juga melihat menggunakan iptables untuk membatasi lalu lintas ke 3306 hanya dari server aplikasi Anda.
sumber
Di http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ , penulis menunjukkan metode untuk menangkap paket menggunakan tcpdump, dan memfilter output berdasarkan string.
Ini mengatasi kekhawatiran Anda tentang general_log dan kinerja, meskipun tcpdump sendiri mungkin akan dikenakan penalti kinerja kecil. Solusi ini juga akan mencatat lebih sedikit data daripada Log Kueri Umum.
Saya belum pernah menggunakan ini sendiri, tapi kedengarannya sangat berguna.
sumber