[JAVA] Zabezpieczanie danych dostępowych do bazy danych

Witam,

Ostatnimi czasy natknąłem się na pewien problem, który z braku wcześniejszego doświadczenia na tym polu został przeze mnie nie dostrzeżony. Mianowicie chodzi mi o bezpieczeństwo danych dostępowych do bazy danych MySQL, a także serwera FTP zaszytych w mojej desktopowej aplikacji napisanej w Javie. Zacząłem tym podejściem w celu łatwiejszego “uruchomienia” samej aplikacji, jednak teraz, w miarę gdy rozwój staje się coraz to poważniejszy, wypadałoby zabezpieczyć dane w bazie czy to na serwerze. Nawet samo przeniesienie tych informacji do osobnego pliku nie za wiele mi daje, gdyż może być on wciąż odczytany. Keystore? Tu również wymagane jest hasło które będzie znał user - raczej odpada. Model “three-tier”? Czy to jedyne bezpieczne wyjście? I jak teraz to połączyć z kliencką aplikacją?

Hmm… raczej tak. Architektura trójwarstwowa niesie też inne dobrodziejstwa przysłaniając bezpośredni dostęp do bazy danych. Wyobraź sobie zmienić nazwę jednej tabeli - powysyłaj klientom nową wersję. Jeśli jest ich dużo i z bazy korzysta powiedzmy 20 aplikacji - masakra, żeby w jednej SQL-ce zmienić nazwę tablicy. A tak tylko zmieniasz sposób pobierania danych przez middleware - w jednym miejscu.

Jak połączyć? Np. napisać WebService -> komunikuje się z bazą danych udostępnia SOPA, aplikacja kliencka łączy się do tego webservice-u nie wiedząc nic o bazie danych. Pobiera generowany przez niego XML, tworzy na tej podstawie obiekty obsługiwane po stronie klienta.

Generalnie czy użyjesz znanego powszechnie rozwiązania czy autorskiego mniejsza. Chodzi tylko o to by na bazie operował wyłącznie middleware i udostępniał on te dane w jakiejś “parsowalnej” postaci. Aplikacja klienta łączy się tylko i wyłącznie do middleware pytając o te dane. Klient ani baza danych nie powinny mieć żadnego kontaktu bezpośredniego ze sobą.