一個 SQL 同時驗證帳號是否存在、密碼是否正確


近日偶爾看到一個很巧妙的 SQL 技巧,一個簡單的 SQL 同時驗證帳號是否存在、密碼是否正確。之前從未曾想過這么做,也未曾見過別人這么做。雖是奇技淫巧,卻真正所謂構思巧妙。如果用來面試考考別人,真的能夠難倒一大片兄弟。好東西不敢獨享,特公開與大家同樂。

 

1 SELECT CASE WHEN p.encrypted_password =? THEN 1 ELSE 0 END
2 FROM tm_app_user u, tm_app_user_credential p
3 WHERE u.app_user_uuid = p.app_user_uuid
4 AND (LOWER(u.user_sign_in_nm) = ? OR LOWER(u.email) = ?)

 

 

解釋:

a. 如果用戶名不存在,則查詢結果是無數據

b. 如果用戶名存在,而密碼不正確,則返回 0

c. 如果用戶名存在,而密碼正確,則返回 1

 

之所以把密碼單獨用一個表保存,是因為用戶的其他信息(用戶名、郵件、電話)與密碼是兩種不同性質的東西,系統架構師決定分開保存,有助於提醒程序員這種差別: 用戶的其他信息可以查看,密碼不能查看;用戶的其他信息更改時可以看到更改前的數據,密碼更改時不能看到更改前的數據;修改用戶密碼與修改用戶其他信息,是兩個不同頁面。

 

雖說程序員普遍有“文人相輕”的毛病(讀書人互相瞧不起),但看到這個 SQL,不能不讓人佩服。

 

我已經將這種技巧,用於我們的折桂單點登錄系統(http://zheguisoft.com)。下一 release 版本將會用上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM