之前從mysql 5.6的時候,mysql 還沒有密碼策略這個東東,所以我們每個用戶的密碼都可以隨心所欲地設置,什麼123 ,abc 這些,甚至你搞個空格,那也是OK的。 而mysql.user 表裡面也保存有password 的欄位進行標識這個是密碼的位置。 但是當升級到了MySQL 5.7 的時 ...
之前從mysql 5.6的時候,mysql 還沒有密碼策略這個東東,所以我們每個用戶的密碼都可以隨心所欲地設置,什麼123 ,abc 這些,甚至你搞個空格,那也是OK的。
而mysql.user 表裡面也保存有password 的欄位進行標識這個是密碼的位置。
但是當升級到了MySQL 5.7 的時候呢。多了密碼策略,在linux下麵安裝,預設是使用中等標準的密碼策略。可以使用
show variables like '%validate_password%' 進行查看
關於這部分知識,可以移步到這篇 Jonsea 寫的博客進行查閱 http://www.cnblogs.com/jonsea/p/5510219.html
到了5.7的版本(Linux安裝),預設的情況下,密碼策略是這樣的
預設8位長度並且要大小寫。所以假如之前用到的什麼123啊,那些,到這個版本都不管用了(當然你可以自己把這些設置給幹掉)。
所以在這裡,只要執行 select password("123"); 直接就報錯,連加密串都不會出來的,拋出錯誤
Error Code: 1819. Your password does not satisfy the current policy requirements
所以用這種方法是不用指望了。但是,直接修改密碼,還是可以走得通的。
比方說我從 5.6 的版本得出 select password("123") -- *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
到了5.7,我可以直接把這串直接貼到系統表裡面。
update mysql.user set authentication_string = "*23AE809DDACAF96AF0FD78ED04B6A265E05AA257" --這個地方用 password("123") 就報錯了,但是直接賦值就不會
where user=XXX;
flush 一下,搞掂。
結語:比較適合當伺服器遷移的時候,假如程式改密碼比較麻煩,只能切IP的時候,還是有用的~