Dostęp do bazy dla kilku użytkowników

0

Chciałbym stworzyć bazę danych z kontami dla kilku użytkowników, których dane trzymam w osobnej tabeli. Użytkownik ma przydzielane prawa dostępu do zasobów bazy (kolumna "Access"). Tabela "users" wygląda tak:

ID | Login | Password | FirstName | LastName | Access | Created | LastLogin
Program do bazy, póki co, loguje się jako administrator z loginem i hasłem administratora, a użytkownik loguje się w programie na swój profil wybierając swój login i podając hasło, które po shashowaniu (MD5) jest porównywane ze hasłem zapisanym w tabeli "users" bazy.
Nie mam zbyt dużego doświadczenia z bazami, więc naszła mnie wątpliwość, czy tak się fachowo robi, czy może trzeba dla każdego użytkownika utworzyć konto (login, hasło) w bazie (CREATE USER), nadać uprawnienia, oczywiście login i hasło będzie zgodne z danymi w tabeli "users".
Problematyczna jest już sytuacja, gdy chciałbym zmienić hasło administratora bazy, to już program nie mógłby się do niej zalogować. Gdyby hasło było zaszyte w programie, to trzeba by wysyłać użytkownikom nową wersję programu, a gdy w rejestrach, to osobiście musiałbym je zmieniać u użytkownika wchodząc do ukrytego trybu administratora programu.
Proszę o wskazówki, jak to prawidłowo wykonać.

1

Jeżeli wybrałeś jak bazę Access-a to musisz wiedzieć że dostęp definowany dla użytkowników jest tylko dla formatu mdb (czyli access 2003) i to jest ostatni format który obsługuje user-level security (https://support.office.com/en-us/article/Set-or-change-Access-2003-user-level-security-in-Access-2010-0c6a10e7-966f-44f4-864e-5d2ef79439fa)

Podejścia są 2: jeden zdefiniowany użytkownik bazy danych łączy się z bazą reszte opierasz na np. tabeli użytkowników, drugi sposób to korzystanie z zabezpieczeń i mechanizmów bazy danych

0

Zgaduje że skoro to 'mySql' to jest jakaś aplikacja łącząca się z bazą przez sieć (Internet)?

Jeżeli tak to program końcowy nie powinien łączyć się bezpośrednio z bazą tylko z aplikacją serwerową,a dopiero ta z bazą.

0

CREATE USER służy do utworzenia w RDBMSie użytkownika aplikacyjnego dla bazy danych, tj. takiego konta za pomocą którego aplikacja łączy się z bazą.
Nie robi się CREATE USER dla każdego użytkownika aplikacji.

1
marogo napisał(a)

No dobra, a co w sytuacji, gdy z jakiegoś powodu trzeba będzie musowo zmienić hasło "zdefiniowanego użytkownika" (bo np. niepowołane osoby zdobyły hasło do tego konta), to przecież trzeba będzie wszystkim użytkownikom przesłać nową wersję programu z zaszytym nowym hasłem? Gdyby użyć sposób z "CREATE USER" dla każdego konta użytkownika w programie, to w sytuacji wykradzenia hasła jednego użytkownika, inne konta są bezpieczne, choć szkody wyrządzone przez złodzieja w bazie mogłyby powstać równie duże jak przy jednym koncie dla programu.

Bardziej jestem skłonny zawierzyć loginowi i hasłu, które są zaszyfrowane w pliku niż takim, które ma user :p. BTW jak login i hasło są w pliku konfiguracyjnym a nie w aplikacji (BTW nie wyobrażam sobie, żeby miały być na sztywno) to nic nie trzeba kompilować i wysyłać.

2

Gdyby użyć sposób z "CREATE USER" dla każdego konta użytkownika w programie

0

@karolinaa nawet inaczej bym zrobił: założyć kilku użytkowników CREATE USER dla odpowiedniej liczby modułów. Każdy user dla osobnego modułu, w zależności od tego jakich potrzebuje uprawnień do poszczególnych tabel. Później utworzyć tabelę z userami w bazie danych i im przydzielać uprawnienia w zależności od funkcji w pojedynczych już modułach.

0

genialne - a jak jeden user będzie potrzebował dostępu do kilku modułów to będziesz tworzył kilka połączeń?

0

Mam w pracy do czynienia z takim właśnie softem i ładnie wszystko działa. Mamy dużą bazę danych podzieloną na schematy w zależności od tego, który moduł chce się z nią połączyć. Do każdego schematu jest osobny użytkownik na poziomie DB. Kiedy taki moduł zaloguje się do bazy to wtedy działa przydzielanie uprawnień na wyższym poziomie. Producenta podać nie mogę ale powiem Wam, że całkiem fajnie się tym zarządza.

0

@grzesiek51114 - a to nie jest tak, że u Ciebie moduł to tak właściwie oddzielna aplikacja, która po prostu ma swojego usera bazodanowego. A użytkownicy aplikacji są identyfikowani i tak na poziomie aplikacji (czyli modułu)?
Bo jeśli tak, to to nic rewolucyjnego, rzekłbym dość normalny przypadek, tylko w niemodułowych aplikacjach nie ma zastosowania.

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