mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?
我肯定錯(cuò)過了什么.
我想為select-only事務(wù)設(shè)置數(shù)據(jù)庫用戶帳戶,但mysql不允許我在創(chuàng)建用戶帳戶時(shí)選擇密碼的哈希方法.
這失敗了:
GRANT SELECT ON myDB.* TO 'selectuser'@'localhost'
IDENTIFIED BY hash('sha256', 'salted-myfakelongrandompasswordstring');
錯(cuò)誤1064(42000):您的SQL語法有錯(cuò)誤;檢查與MySQL服務(wù)器版本對(duì)應(yīng)的手冊(cè),以便在第1行的’hash(‘sha256′,’salted-myfakelongrandompasswordstring’)附近使用正確的語法
這傳遞:
GRANT SELECT ON myDB.* TO 'selectuser'@'localhost'
IDENTIFIED BY 'salted-myfakelongrandompasswordstring';
我檢查了phpinfo頁面,并且已經(jīng)啟用了sha256哈希引擎.
有沒有辦法更改mysql的默認(rèn)哈希算法,或者我的SQL語法是否正確?
解決方法:
不,您不應(yīng)該使用自己的密碼哈希進(jìn)行MySQL身份驗(yàn)證.
MySQL使用自己的密碼散列函數(shù)(PASSWORD()),它產(chǎn)生一個(gè)41字節(jié)的十六進(jìn)制字符串(基于將SHA1應(yīng)用于輸入兩次).不幸的是,沒有使用鹽.
如果您能夠以問題中顯示的方式使用GRANT,那么MySQL會(huì)將其PASSWORD()函數(shù)應(yīng)用于hash()函數(shù)的字符串輸出.隨后,當(dāng)您要登錄時(shí),您必須輸入密碼的256位哈希值,以便與MySQL身份驗(yàn)證數(shù)據(jù)庫中的內(nèi)容進(jìn)行匹配.
此外,MySQL支持MySQL 6.0.5中的SHA2()系列哈希函數(shù).
hash()函數(shù)是你可能從PHP中記住的東西.它不是MySQL的一部分.
更新:本周我參加了MySQL大會(huì),發(fā)現(xiàn)他們正在完全改變未來產(chǎn)品版本號(hào)的路線圖. SHA2()函數(shù)目前是MySQL源代碼的一部分,但它未確定對(duì)應(yīng)的產(chǎn)品版本.此外,您需要使用OpenSSL / YaSSL支持構(gòu)建的MySQL,以便SHA2()能夠正常工作.
重新評(píng)論:通常,MySQL身份驗(yàn)證與給定Web應(yīng)用程序中的用戶帳戶身份驗(yàn)證完全分開(出于多種原因,這是最佳做法).
是的,您需要為您的Web應(yīng)用程序硬編碼MySQL身份驗(yàn)證的用戶名/密碼.可能在,但更好的是配置文件.當(dāng)然,把這些放在web根目錄之外.
當(dāng)用戶需要登錄時(shí),計(jì)算其輸入密碼的hash(),并結(jié)合其帳戶記錄的salt值.然后將其與存儲(chǔ)在該用戶的數(shù)據(jù)庫中的哈希進(jìn)行比較.在偽代碼中:
$salt = $db->query("SELECT salt FROM Accounts WHERE account_name = ?",
$input_account_name);
$password_hash = hash('sha256', $salt + $input_password)
$is_password_correct = $db->query("SELECT password_hash = ?
FROM Accounts WHERE account_name = ?",
$password_hash, $input_account_name);
標(biāo)簽:mysql,passwords,hash,salt
來源: https://codeday.me/bug/20190622/1260567.html
總結(jié)
以上是生活随笔為你收集整理的mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux脚本for循环(linux 脚
- 下一篇: mysql中select语句子句,了解m