Bir Kullanıcı Veritabanının standart bir uygulaması var mı?


14

Web sitem için temel kişiselleştirilmiş kullanıcı işlevselliğini uygulamam gerekiyor. Bu tip veritabanları için standart bir yapı var mı? Her kullanıcının kendi satırına sahip tek bir tablodaki tüm kullanıcı bilgileri ve verilerinin olması yaygın bir uygulama mıdır, yoksa bu bilgi farklı tablolar arasında bölünmeli ve birbirine bağlı olmalıdır (belki de verimlilik için?) Güvenlikle çok ilgili değilim bu noktada, ama çok uzun zaman önce şifre şifreleme almak istiyorum.

Google'da aradığım şeyi bulmaya çalıştım, ancak boşuna. Sorunun daha fazla açıklığa veya başka bir şeye ihtiyacı olup olmadığını bize bildirin.

Yanıtlar:


17

Tipik normalizasyon standartlarını kullanmanızı öneririm. Satır başına bir kullanıcı.

  • Kullanıcı Kimliği (artan bigint)
  • Kullanıcı Ortak Adı (sitede gösterilecek)
  • Kullanıcı E-posta Adresi
  • Password Salt (Hesap oluşturulduğunda eklenen her kullanıcı için benzersiz)
  • Şifre (Tuzla karıştırılmış - MD5 veya SHA1, tercihiniz)
  • Hesap Oluşturulduğu Tarih

İş kurallarınız göz önüne alındığında gerisi size kalmış.


Modern şifre karma seçenekleri argon2, bcrypt veya scrypt olacaktır.
douggard

is_active da bu listede olmalı
Ibo

8

Büyük bir eski moda "o bağlıdır" gitmek zorunda kalacak.

Tabii ki bu masada bir çeşit anahtara ihtiyacınız olacak. Bir UserID ile başlayabilirsiniz. Bu sadece artan bir INT (veya 2.1 milyondan fazla kullanıcınız olacaksa bigint) olabilir.

Ben de çok kullanıcı veritabanları ana kullanıcı kimliği olarak GUID kullanın gördüm. Ancak bu, PK'ler için GUID'leri kullanarak tamamen farklı bir solucan kutusu açıyor.

Daha sonra veritabanınızı ne kadar normalleştirmek istediğinize karar vermeniz gerekir. Kullanıcınızın birden fazla e-posta almasına izin verecek misiniz? birden fazla telefon numarası? Eğer öyleyse, farklı bir tabloda olmalıdırlar.

Ana kullanıcı tablosunu şu şekilde tutardım:

  • kullanabileceğiniz bir çeşit kimlik veya PK
  • Adı / Soyadı veya sadece bir kullanıcı adı
  • kullanıcının bir tür durumu (etkin, devre dışı, vb.) - (bir durum tablosuna tinyint bağlantısı)
  • oluşturulduğu tarih

Bu sizin başlangıç ​​noktanız olmalı.

Oradan, depolamak istediğiniz öğeye göre başka sütunlar ekleyebilirsiniz. E-posta bir e-posta tablosuna, bir adres tablosuna adres, vb. Bağlanabilir. Parola karma + tuz kullanabilir, ancak openids'i düşündünüz mü?

Bu makaleyi okumanızı şiddetle tavsiye ederim - http://www.sqlservercentral.com/articles/data-modeling/71725/


0

Kullanıcıların kimlik doğrulaması ile ilgili ise, LDAP kullanırdım. Zaten bir veritabanı kullanıyorsanız ve başka tablolarınız (siparişler, ürünler vb.) Varsa, kullanıcılar için ayrı bir veritabanı oluşturmayın. Bu masalara katılmak isteyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.