Dodam że oprogramowanie nie ma serwera aplikacyjnego. Sa jedynie bezstanowe windowsowe klienty desktopowe i baza danych. Cała logika jest w klientach.
Nie ma serwera aplikacyjnego? To bezstanowe klienty jak trzymają swój bezstan? W swoich bazach danych, czy w centralnej? Z tego piszesz, to średnio ogarniasz jak ta aplikacja dokładnie działa, a chcesz ją "bezpiecznie" na świat wystawić - to poważny dzwonek ostrzegawczy.
Rozumiem mniej więcej to o czym piszesz @TurkucPodjadek, z tym że wydaje mi się że to jest bardziej opis pod aplikację webową. Orpgoramowanie z którego korzysta placówka to programy desktopowe i żaden komputer w sieci lokalnej, łącznie z serwerem bazy nie ma dostępu do internetu. Maszyn jest kilka, sieć jest niewwielka. Plus router, na którym skonfigurowano VPN. Chciałbym uzyskać odpowiedź w kontekście VPN i RDP. Wydaje mi się że nie ma sensu używać RDP, jeśli nie zwiększa to bezpieczeństwa, a powoduje dodatkowy narzut sieciowy.
Klienty desktopowe i baza danych brzmi jak antypattern tutaj - więcej wektorów ataku, bo nie wiadomo ilu tych klientów jest i co one dokładnie robią. Przeglądarka internetowa (w przypadku aplikacji web) jest miliony razy bardziej sprawdzonym softem aniżeli tajemnicze "klienty desktopowe".
Jednak generalnie niczego to nie zmienia w kwestia mojej porady. Poza tym, moja porada dotyczy tak VNC, jak RDP czy SSH. Ty masz w pierwszej kolejności założyć, że ktoś z zewnątrz (nazwijmy roboczo: hacker) wskutek jakichś działań zdobędzie (w najgorszym przypadku) dokładnie takie same uprawnienia jak Ty, łączący się z zewnątrz. Rozumiesz to założenie? Wychodząc z tego założenia, nie ma tu znaczenia jakiego protokołu (do pewnego stopnia, bo oczywiście nieszyfrowane z zasady powinny być odrzucane) użyjesz i jaką masz aplikację, tylko jak zorganizujesz infrastrukturę oraz docelowe uprawnienia. Jeżeli nie jest możliwe odpowiednie przycięcie Twojego zdalnego konta tak, by nie narobiło szkód typu wyprowadzenie danych wrażliwych, to zdecydowanie nie baw się w takie rzeczy. Oczywiście mówimy tu o szczególnym nacisku na bezpieczeństwo tych danych, a nie użytkowość zdalną tego rozwiązania.
Jeszcze dopowiem jak ja coś takiego robiłem, bo miałem taki case w swojej karierze, że również miałem do czynienia z wrażliwymi bazami. Z tych baz zdalnie był mi potrzebny naprawdę pewien wycinek danych dot. jedynie mojego własnego konta, które sprawdzało działanie aplikacji i parę prostych spraw administracyjnych. Nic więcej.
Ja to rozwiązałem tak, że miałem specjalne skrypty robiące dumpa tej bazy, które ją w trakcie "anonimizowały" - wycinały prawie wszystkie dane wrażliwe (imiona, nazwiska, pesle, numery dowodów itp) i taka "zaanonimizowana" kopia bazy była odtwarzana gdzieś indziej i dopiero udostępnana w sposób jaki opisałem w poście nr 1 - niby overkill, bo żadnych ważnych danych niby nie powinna zawierać, ale miałem z tyłu głowy, że jakiś skrypt się walnie i nie wytnie danych i przeoczę tę sytuację, bo nie miałem dodatkowej automatyki, która to "weryfikowała".
W ten sposób nawet jak by się znalazł inny TurkucPodjadek, co miałby identyczne dostępy to w najgorszym przypadku dostałby się do zaanonimizowanej bazy bez żadnych danych praktycznie. To jest właśnie podejście zakładające ew. fuckup bezpieczeństwa.
Z kolei normalna (czyli z danymi wrażliwymi) baza była niemal w kompletnie odseparowanej sieci nieodstępna dla świata jakkolwiek według mojej wtedy wiedzy i testów.