Mysql
保存每個 mysql 使用者登錄嘗試
有沒有辦法保存使用者嘗試登錄 MySQL 伺服器的使用者名和 IP?
啟用
general-log
似乎會記錄所有內容,但這似乎會寫入太多詳細資訊,佔用更多空間,並且也有可能保存密碼詳細資訊,因此如果有任何其他可用選項會很有幫助。
如果您擔心登錄失敗,這意味著您的伺服器可以從 Internet 訪問。不應該。
但是,有一種方法可以在不借助通用日誌的情況下獲取資訊。
根據手冊,您可以使用系統變數觸發將這些失敗的連接記錄到錯誤日誌中
log_warnings
:如果該值大於 1,則將中止的連接寫入錯誤日誌,並寫入新連接嘗試的拒絕訪問錯誤。
這是一個動態變數,但在執行時更改它似乎不會觸發日誌記錄行為。將此添加到您的 my.cnf
[mysqld]
部分中:log-warnings = 2
重新啟動伺服器守護程序。
然後,您應該開始在 MySQL 錯誤日誌中看到登錄失敗。
我不知道您所說的“保存密碼詳細資訊”是什麼意思。密碼是從客戶端發送到伺服器的…
SHA1( password ) XOR SHA1( "20-bytes random data from server" <concat> SHA1( SHA1( password ) ) )
…因此您不會發現客戶端嘗試的密碼被記錄在任何地方。伺服器不知道客戶端使用的密碼。它只知道它是否使用了正確的密碼,如果客戶端知道正確的密碼,它會自行計算客戶端返回的雜湊值。
我最近遇到了一個 mysql 審計外掛,它(最終)將身份驗證請求記錄到伺服器中。它確實需要編譯一些程式碼並載入到外掛中,但這並不太難。
https://github.com/outbrain/audit_login
http://code.openark.org/blog/mysql/introducing-audit_login-simple-mysql-login-logfile-based-auditing