2009-08-11 15 views
1

我已經創建了MySQL數據庫上的表的視圖,以使另一個應用程序可以使用我們現有的(集中式)客戶端表。我需要幫助創建一個查詢鹽和md5密碼,然後確認登錄MySQL表

我們的密碼存儲爲

MD5(密碼+鹽)+「:」 +鹽

通常我通過我們連接到它,但給定的應用程序的編程語言解碼這個.. 。

這次它是第三方應用程序,我只有SQL和一個查詢來授權用戶。

你能幫我創建一個有效的SQL查詢來驗證嗎?

的邏輯是直截了當:

  • 獲取鹽給定用戶,(冒號後的所有內容)
  • 結合的密碼和鹽
  • MD5密碼和鹽
  • 然後比較導致的md5散列

此應用程序的默認sql查詢是

select * from users where userName =?和userPass =?

在此先感謝。

回答

1

我想這和它的作品:

SELECT * FROM users 
WHERE userPass = CONCAT( 
    MD5(CONCAT('xyzzy', (@salt := SUBSTRING_INDEX(userPass, ':', -1)))), 
    ':', @salt) 
AND userName = 'bkarwin'; 

我知道你可能沒有自由去改變什麼,但FWIW,MD5()不被認爲是足夠強大的加密密碼。建議使用SHA-256,通過MySQL 6.0.5中的SHA2()函數可以使用SHA-256。

+0

謝謝 - 工作過。此外,你是對的 - 我沒有改變的自由,但無論如何感謝。 – Danny 2009-08-11 23:27:11

0
select * from users where userName='MyUser' and userPass=concat(md5('MyPass'), ':', salt) 
where salt=(
    select substring(userPass FROM (instr(userPass, ':')+1)) from users 
    where userName='MyUser' 
)