尋求創建一個保存用戶信息(主要是用戶和密碼)的數據庫表。在數據庫中存儲用戶密碼/數據
- 散列(密碼)和用戶的最佳方式是?
- 我是否應該加密用戶的名字?
- 如果我有一個密碼錶和另一個用戶數據表,我怎麼可以關聯/鏈接它們?
登錄是沒有問題的,問題是如何將表(數據的密碼的表和表爲每個用戶)
由於
尋求創建一個保存用戶信息(主要是用戶和密碼)的數據庫表。在數據庫中存儲用戶密碼/數據
登錄是沒有問題的,問題是如何將表(數據的密碼的表和表爲每個用戶)
由於
關聯的登錄是沒有問題的中, 問題是表關聯 (口令和數據的 錶針對每個用戶的表)
要表關聯,您可以用關係工作:
我會存儲散列和表中醃製密碼與用戶數據的其餘部分。如果您真的想將密碼存儲在單獨的表中,請將用戶標識與其關聯以將密碼與用戶相關聯。通常使用強哈希算法,例如SHA251並加密密碼以防止彩虹表攻擊。我不認爲你應該需要散列用戶名。
感謝貝林加,我有一個獨特的表/傳入/登錄,問題是表中的關係:用戶邁克和在另一個表中存在的關聯(個人)數據 – anvd 2011-03-16 18:01:48
*不*使用加密哈希算法!使用bcrypt(http://bcrypt.sourceforge.net/) – 2011-03-16 18:04:10
@Fel,這已經說了幾次了,但我們都強烈建議你只需添加UserId,Username和PasswordHash列來擴展用戶表。如果你這樣做,你的生活將會更容易。這是一個選擇嗎? – 2011-03-16 18:04:20
正如我上面評論,我只是散列密碼。
另外,你爲什麼要在單獨的表中存儲用戶和密碼?它們是相關的,應該在同一個表中。諸如地址之類的數據將屬於單獨的表格。
不,我的想法只是通過/登錄和另一個關聯的數據,如出生,位置等表 – anvd 2011-03-16 17:57:45
如果您絕對必須有兩個表,一個使用哈希/鹽漬密碼,另一個使用用戶信息,您可以使用代理鍵來執行表之間的關係。
你可以有一個設置是這樣的:
CREATE TABLE users (USER_ID INTEGER,
PASSWORD_ID INTEGER,
USER_ATTRIBUTE VARCHAR(30));
CREATE TABLE passwords (PASSWORD_ID INTEGER,
PASSWORD_HASH VARCHAR(255));
PASSWORD_ID是代理鍵,您可以使用它在用戶表中的密碼錶參考價值。您可以使用SQL查詢將表連接在一起:
SELECT *
FROM users INNER JOIN passwords
ON users.PASSWORD_ID = passwords.PASSWORD_ID;
雖然我不會在任何系統中使用稱爲「密碼」的表,因爲它是一個成熟的黑客對象... – 2011-03-16 19:16:59
我只是散列密碼。顯然,兩者都會更安全,但我相信最好的做法是散列密碼。 – 2011-03-16 17:50:41
您還應該爲每個密碼使用不同的鹽。 – John 2011-03-16 17:53:07
@John,如果你對每個密碼使用不同的鹽,當你需要檢查用戶密碼是否正確時,你會如何使用正確的salt? – 2011-03-16 17:59:23