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