我想知道構建和存儲ID的最佳實踐是什麼。幾年前,一位教授向我講述了一個身份不好的身份證制度的危險,以社會安全號碼爲例。特別是,因爲SSN沒有任何錯誤檢測......所以不可能區分9位字符串和有效SSN。而現在政府機構需要諸如姓氏+ SSN或生日+ SSN之類的東西來跟蹤您的數據並確保其驗證。此外,根據您的出生地點,您的社會安全號碼有點可預測。數據庫ID最佳實踐
現在我正在構建一個用戶數據庫......並且基於此建議「userid mediumint auto_increment」將是不可接受的。特別是如果我打算使用此ID作爲用戶的主要標識。 (例如,如果我允許用戶更改他們的用戶名,那麼用戶名會比數字用戶標識更難以跟蹤...需要級聯外鍵等)。電子郵件發生更改,用戶名可能更改,密碼更改。但是用戶名應該永遠保持不變。
顯然,auto_increment只是爲surrogate_keys設計的。也就是說,只有當你已經有一個主要的識別機制時,它纔是有用的捷徑,但它不應該被用作數據的「固有標識符」。創建隨機的UUID看起來很有趣,但隨機性讓我失望。
所以我問:創建「主鍵」標識號的最佳做法是什麼?
你的教授的建議是什麼讓你斷定自動遞增整數不適合作爲用戶數據的唯一標識符? – jwiscarson 2010-12-03 22:35:54
自動遞增的整數是可預測的,不包含任何形式的錯誤檢測。至少,我希望「職業成績」身份證實踐有點不可預知和自我認同。例如,信用卡號碼有一個校驗和數字,這意味着如果人類錯誤地輸入信用卡,那麼只有1/10的機會被接受。它們也是不可預測的,所以黑客不能只在亞馬遜中輸入隨機信用卡號碼,並希望他甚至有一個有效的信用卡號碼。同樣,黑客不應該在可預測的UID上發送字典攻擊。 – Dragontamer5788 2010-12-03 22:43:03
我不明白你的比較。如果信用卡公司使用實際的信用卡號碼作爲數據庫ID,而不是將它們作爲一些嚴重受保護的屬性存儲在表格中,我會感到震驚。您的評論意味着對ID的瞭解將成爲數據庫中的某種後門。某種類型的認證應該防止未經授權的數據訪問,而不是隨機數據庫值的知識。 – jwiscarson 2010-12-03 22:50:24