Próbuję modelować moduł uwierzytelniania użytkownika dla bazy danych MS SQL Server, która będzie zapleczem aplikacji interfejsu użytkownika Delphi. Zasadniczo chcę mieć konta użytkowników, w których użytkownik należy do tylko jednej grupy. Grupa może mieć „n” liczbę praw.
Chcę również dodać historię haseł do bazy danych, ponieważ użytkownik będzie musiał zmienić swoje hasło w oparciu o ustawienia aplikacji (na przykład co 90 dni).
Chcę także rejestrować zdarzenie za każdym razem, gdy użytkownik loguje się i wylogowuje. Mogę to rozszerzyć na dodatkowe wydarzenia w przyszłości.
Poniżej znajdziesz mój pierwszy crack. Daj mi znać, jak mogę to ulepszyć, ponieważ robię to po raz pierwszy.
Czy widzisz potrzebę dodatkowych atrybutów zabezpieczeń opartych na rolach i ograniczeń reguł haseł / okresów ważności?
źródło
Odpowiedzi:
W oparciu o podane wymagania Twój model jest w bardzo dobrym stanie.
Oto kilka sugestii dotyczących ulepszeń:
Nie mówisz tego wprost, więc trudno powiedzieć - ale wygląda na to, że możesz przechowywać hasło użytkownika bezpośrednio. To byłoby bardzo złe! Jeśli spojrzysz na popularne bazy danych uwierzytelniania, hasła są przechowywane w postaci zaszyfrowanej. Często widzisz zarówno
password
kolumnę, jak ipassword_salt
kolumnę.Twój
USER_LOGS
stół maEvent
kolumnę. Nie masz jasności co do tego, jak należy to wypełnić. Czy powinna istniećEVENT_TYPE
tabela, która zawieraUSER_LOGS
odniesienia? Może to ułatwić raportowanie. Typowe zdarzenia obejmują logowanie, wylogowywanie, niepowodzenie hasła, zmianę hasła, resetowanie hasła, blokowanie, odblokowanie, ...Twój
GROUP_RIGHTS
stół nie wskazuje, kto przyznał prawa. Do celów ścieżki audytu ludzie często rejestrują, kto i kiedy dokonał zmiany. To może nie stanowić problemu.Oto kilka pytań dotyczących podanych wymagań biznesowych, które różnią się od wzorca zabezpieczeń opartego na rolach w „podręczniku” na kilka sposobów:
Czy na pewno chcesz, aby użytkownicy byli tylko w jednej grupie? Zaletą bezpieczeństwa opartego na rolach jest to, że role są raczej statyczne, podczas gdy ludzie pełniący role przychodzą i odchodzą dość często. Obejmuje to fakt, że niektórzy ludzie często „noszą dwa czapki”.
Twój projekt jest tylko dotacją. Niektóre systemy obejmują udzielanie i cofanie . Pozwala to powiedzieć, że powszechnie dostępne prawo nie jest dostępne dla konkretnej grupy.
Masz użytkowników i konta podejrzane jak
USERS
w twoim projekcie. Często rozróżnia się identyfikatory osób i użytkowników . Niektóre identyfikatory użytkowników dotyczą zespołów lub maszyn, a niektóre osoby mają wiele identyfikatorów użytkowników do różnych celów. Czy to rozróżnienie byłoby dla Ciebie pomocne?źródło
Myślę, że operator bitowy to najlepszy sposób na wdrożenie uprawnień użytkownika. Tutaj pokazuję, jak możemy to zaimplementować w Mysql.
Poniżej znajdują się przykładowe tabele z niektórymi przykładowymi danymi:
Tabela 1 : Tabela uprawnień do przechowywania nazwy uprawnień wraz z nią nieco jak 1,2,4,8..etc (wielokrotność 2)
Wstaw kilka przykładowych danych do tabeli.
Tabela 2 : Tabela użytkowników do przechowywania identyfikatora użytkownika, nazwy i roli. Rola zostanie obliczona jako suma uprawnień.
Przykład:
jeśli użytkownik „Ketan” ma zezwolenie na „dodawanie użytkownika” (bit = 1) i „usuwanie bloga” (bit-64), rola będzie wynosić 65 (1 + 64).
Jeśli użytkownik „Mehata” ma zezwolenie na „Blog-View” (bit = 128) i „User-Delete” (bit-4), rola będzie wynosić 132 (128 + 4).
Przykładowe dane-
Umieszczanie uprawnień użytkownika Po zalogowaniu, jeśli chcemy załadować uprawnienia użytkownika, możemy zapytać poniżej, aby uzyskać uprawnienia:
Tutaj user.role „&” permutation.bit jest bitowym operatorem, który da dane wyjściowe jako -
Jeśli chcemy sprawdzić pogodę, dany użytkownik ma uprawnienia do edycji lub nie-
Dane wyjściowe = brak wierszy.
Możesz także zobaczyć: http://goo.gl/ATnj6j
źródło