Witam
Zaczynam zabawę z dostępem do bazy poprzez Internet.
Żeby było bezpiecznie, chcę całą logikę przetwarzania umieścić po stronie serwera, a poleceniami GRANT daję zezwolenia na uruchamianie odpowiednich procedur dla grup użytkowników. I tu się pojawia pewna moja wątpliwość. Podczas logowania, silnik sprawdza, czy zgłoszony user/hasło ma dostęp do bazy i zgodnie z przydzielonymi wcześniej dostępami, pozwoli mu na uruchamianie pewnych procedur, ale bez fizycznego dostępu do danych (czyli SELECT nie, EXECUTE tak). Jako hasło mogę do bazy wpisywać jednostronnie szyfrowanie np. poprzez MD5(), czyli aplikacja Delphi klienta, przed wysyłką hasła też je zaszyfruje. Wywołania parametrów tekstowych sprawdzę pod kątem Code Injection. Do tej pory wszystko wydaje się zrozumiałe.
Moje wątpliwości dotyczą samego wywoływania procedur, np. dopisywania informacji o graczu. Jeżeli Kowalski i Wiśniewski mają te same uprawnienia, to po zalogowaniu do bazy, wywołania:
CALL grupa.edytuj_gracza("Kowalski",nowa_wartość)
jak i:
CALL grupa.edytuj_gracza("Wiśniewski",nowa_wartość)
będą w pełni legalne. Jeżeli dostęp następuje z mojej aplikacji, to ona wstawi prawidłowy nick lub ID. Jeżeli jednak ktoś połączy się zewnętrzną konsolą, to po zalogowaniu jako Kowalski, bez problemu może wywołać procedurę jako "Wisniewski", bo ma do tego prawo. Jak się przed tym zabezpieczyć?
-
Czy istnieje jakaś zmienna, która zwiera informację, kto jest zalogowany - wtedy wywołam tylko:
CALL grupa.edytuj_gracza(nowa_wartość)
a procedura wstawi sobie jakiś Current_user_ID? -
czy można deklarować zmienne, które będą widoczne dla wszystkich wbudowanych procedur - wtedy podczas logowania umieszczę tam właściwy ID użytkownika.
Z góry dziękuję za wskazówki. W googlach zadaję niewłaściwe pytania, bo dostaję milion niewłaściwych odpowiedzi ;)