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