Jak tabela z użytkownikami bazy danych powinna być powiązana z użytkownikami serwisu www?

0

Chodzi mi o to, że w bazie danych są różne role, np. administrator oraz użytkownicy z mniejszą ilość uprawnień.
Jednak jak mamy serwis www (sklep, forum), to rejestrują się na nim oraz logują jacyś użytkownicy.
Oczywiście wiadomo, że nie mają oni dostępu bezpośredniego do kont użytkowników samej bazy. Jednak czy tabela użytkowników samej bazy powinna być "jakoś" powiązana z tabelą użytkowników, który rejestrują się i logują do takiego forum lub sklepu?

6

Co do różnych ról i uprawnień - zapoznaj się z hasłem ACL - https://pl.wikipedia.org/wiki/Access-control_list. Wiele z popularnych frameworków posiada już jakąś gotową implementację - np. PHP/Symfony - https://symfony.com/doc/5.2/security/acl.html lub https://github.com/symfony/acl-bundle/blob/main/src/Resources/doc/index.rst, Spring - https://www.baeldung.com/spring-security-acl, Laravel - https://mateusjunges.github.io/laravel-acl/, w związku z czym dużą część roboty masz już zrobioną, nie musisz wszystkiego samodzielnie klepać od zera.

A co do kwestii użytkowników bazy i ich separacji od użytkowników serwisu - nie wiem, czy dobrze zrozumiałem o co pytasz, więc może moja odpowiedź w ogóle nie będzie tym, czego oczekujesz ;) W każdym razie - nie tworzysz osobnego usera/loginu do bazy dla każdego użytkownika strony. Do obsługi bazy masz parę kont - jakieś jedno admina, którego używasz do zarządzania, ale które nie jest używane do normalnej pracy oraz jeden/kilka loginów z ograniczonym dostępem do bazy. Zasada jest taka, że dajesz uprawnienia jak najmniejsze, tylko takie minimum, które jest niezbędne do prawidłowej pracy.

i potem jak użytkownik Stefan69 się loguje albo wrzuca post na stronę, to do bazy nie łączy się taki login, ale jeden z kilku loginów stworzonych do obsługi bazy przez aplikację. Podczas logowania ten "bazodanowy" login najpierw robi coś na zasadzie "czy user Stefan69 ma hasło XYZ12345" i jeśli podane informacje są poprawne, to w odpowiedzi dajemy ID usera w bazie. I potem kolejne działania są na zasadzie przesłania do serwera informacji w stylu "użytkownik o ID 4322 chce dodać post", coś skasować, wysłać PW itp.

I teraz dochodzimy do tego ACL - podczas takich działań powinno być sprawdzone, czy user o określonym ID ma uprawnienia do wykonania określonych czynności. Przykładowo (bazując na naszym forum) każdy może założyć wątek oraz udzielić odpowiedzi. Ale - jeśli wątek jest zablokowany, albo jest w specjalnej kategorii (np. Perełki albo Kosz) to już nie da się w nim pisać. No chyba, że jesteś moderatorem - to możesz. Albo edycja posta - można edytować swoje posty i tylko przez jakiś czas. Ale moderator może wszędzie i wszystko. Wyświetlanie wątków - każdy może wszystko, ale są ukryte kategorie widoczne jedynie dla osób uprawnionych. I tym się właśnie zajmuje ACL - sprawdza, czy dany użytkownik ma uprawnienia do danych działań. Robi to w oparciu o różne wytyczne - czyli typ działania, indywidualne uprawnienia przypisane do tego usera, a także np. grup, do których user jest przydzielony (moderator, user zwykły, gość niezalogowany).

Oczywiście - dałem parę uproszczeń, ale z grubsza tak to działa i mam nadzieję, że udało mi się napisać to w jakiś zrozumiały sposób ;)

2

Kiedyś, dawno, dawno temu taki sposób logowania był stosowany w bazach Oracle - czyli że użytkownik to nie był wpis w bazie a rzeczywisty użytkownik instancji bazy danych. Tak było ze względu na technologie około bazodanowe, jak Oracle Forms i Reports. Aktualnie nikt tego nie stosuje (i bardzo dobrze), gdyż sprawdzanie uprawnień rob i się na poziomie warstwy pośredniej (API).

1 użytkowników online, w tym zalogowanych: 0, gości: 1