本文將介紹MySQL用戶密碼相關的一些知識,以及5.6中對于安全性的一些改進。如果你已經接觸MySQL一段時間了,那么想必你一定知道M
本文將介紹MySQL用戶密碼相關的一些知識,以及5.6中對于安全性的一些改進
如果你已經接觸MySQL一段時間了,那么想必你一定知道MySQL把所有用戶的用戶名和密碼的密文存放在mysql.user表中。大致的形式如下:
可見MySQL在其內部是不存放用戶的明文密碼的(這個也是一般程序對于敏感信息的最基礎保護)。一般來說密文是通過不可逆加密算法得到的。這樣即使敏感信息泄漏,除了暴力破解是無法快速從密文直接得到明文的。
MySQL用的是哪種不可逆算法來加密用戶密碼的MySQL實際上是使用了兩次SHA1夾雜一次unhex的方式對用戶密碼進行了加密。具體的算法可以用公式表示:password_str = concat('*', sha1(unhex(sha1(password))))
我們可以用下面的方法做個簡單的驗證。
MySQL用戶密碼的不安全性其實MySQL在5.6版本以前,對于對于安全性的重視度非常低,對于用戶密碼也不例外。例如,MySQL對于binary log中和用戶密碼相關的操作是不加密的。如果你向MySQL發送了例如create user,grant user ... identified by這樣的攜帶初始明文密碼的指令,那么會在binary log中原原本本的被還原出來。我們通過下面的例子來驗證。
創建一個用戶:
用mysqlbinlog查看二進制日志:
MySQL5.6中對于用戶密碼的安全性加強好在MySQL5.6開始對安全性有了一定的重視,為了杜絕明文密碼出現在binlog中的情況,,MySQL引入了一系列會以密文方式記錄二進制日志的命令:
細心你的也許會發現,change master to master_password=''命令不在這個范疇中。這也就意味著MySQL5.6中仍然使用這樣的語法來啟動replication時有安全風險的。這也就是為什么5.6中使用帶有明文密碼的change master to時會有warning提示,具體如下:
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com