Czy istnieje standardowa implementacja bazy danych użytkowników?

14

Muszę wdrożyć podstawowe spersonalizowane funkcje użytkownika dla mojej witryny. Czy istnieje standardowa struktura baz danych tego typu? Podobnie jak w przypadku powszechnej praktyki, aby wszystkie informacje o użytkowniku i dane znajdowały się w jednej tabeli, przy czym każdy użytkownik ma własny wiersz, czy też informacje te powinny być dzielone między różne tabele i łączone ze sobą (może ze względu na wydajność?) Nie martwię się o bezpieczeństwo w tym momencie, ale oczywiście będę chciał mieć szyfrowanie hasła zbyt długo.

Próbowałem znaleźć to, czego szukałem w Google, ale bezskutecznie. Daj mi znać, jeśli pytanie wymaga dalszego wyjaśnienia lub czegoś innego.

cfrederich
źródło

Odpowiedzi:

17

Sugeruję stosowanie typowych norm normalizacyjnych. Jeden użytkownik na wiersz.

  • ID użytkownika (przyrostowy bigint)
  • Nazwa pospolita użytkownika (wyświetlana na stronie)
  • Adres e-mail użytkownika
  • Hasło Salt (unikalne dla każdego użytkownika, wstawiane podczas tworzenia konta)
  • Hasło (mieszane z solą - MD5 lub SHA1, twoje preferencje)
  • Data utworzenia konta

Reszta zależy od twoich reguł biznesowych.

Josh Bond
źródło
Nowoczesne opcje mieszania haseł to argon2, bcrypt lub scrypt.
douggard
is_active powinien również znajdować się na tej liście
Ibo
8

Będę musiał wybrać wielką starą modę „to zależy”.

Oczywiście będziesz potrzebować jakiegoś klucza do tego stołu. Możesz zacząć od ID użytkownika. Może to być po prostu rosnąca INT (lub bigint, jeśli zamierzasz mieć ponad 2,1 miliona użytkowników).

Widziałem, że wiele baz danych używa również identyfikatorów GUID jako głównego identyfikatora użytkownika. Ale to otwiera zupełnie inną puszkę robaków korzystających z GUID dla PK.

Następnie musisz zdecydować, jak znormalizowana ma być twoja baza danych. Czy pozwolisz, aby użytkownik miał wiele e-maili? wiele numerów telefonów? Jeśli tak, powinny znajdować się w innej tabeli.

Zachowałbym główną tabelę użytkowników, aby:

  • jakiś identyfikator lub PK, którego możesz użyć
  • Imię / Nazwisko lub po prostu nazwa użytkownika
  • pewien rodzaj statusu użytkownika (aktywny, wyłączony itp.) - (tinyint łączący się z tabelą statusu)
  • stworz Date

To powinien być twój punkt wyjścia.

Stamtąd możesz dodać inne kolumny na podstawie tego, co chcesz przechowywać. E-mail może prowadzić do tabeli e-mail, adresu do tabeli adresów itp. Hasło może używać skrótu + soli, ale czy rozważałeś openids?

WYSOKIE zalecam przeczytanie tego artykułu - http://www.sqlservercentral.com/articles/data-modeling/71725/

SqlSandwiches
źródło
0

Jeśli chodzi o uwierzytelnianie użytkowników, użyłbym LDAP. Nie twórz osobnej bazy danych dla użytkowników, jeśli już korzystasz z bazy danych i masz inne tabele (zamówienia, produkty itp.). Możesz dołączyć do tych tabel.


źródło