2010-01-16 24 views
7

Jeśli aplikacja C# łączy się z serwerem mysql od klienta, w jaki sposób zapisać nazwę użytkownika/hasło mysql dla połączenia? Jeśli mam go w pliku konfiguracyjnym lub osadzony w źródle, można go znaleźć za pomocą inżynierii odwrotnej. Nie jest możliwe podanie wszystkim użytkownikom hasła MySql.C# praktyki połączenia mysql

Mam również logowanie do aplikacji. W jaki sposób wymuszam, aby użytkownik przeszedł proces logowania i nie tylko odtwarza kod źródłowy i skomentuje kod C# weryfikujący logowanie?

Czy w jakikolwiek sposób zarządzasz tymi połączeniami między MySql i aplikacją po stronie klienta, czy musi być trzeci program po stronie serwera, który wchodzi w interakcję z lokalną bazą danych, aby być bezpiecznym?

+0

Interesujące ... zamierzałem oznaczyć to jako dupę, ale wyszukiwanie na SO okazało się zilchem. Pytanie dotyczy tylko ASP.NET, na pozór nigdy nie dotyczy klientów Winform. –

Odpowiedz

3

Być może masz dwustopniowy system: Miej konto SQL, którego jedynym uprawnieniem jest wykonanie procedury przechowywanej przy użyciu nazwy użytkownika i hasła oraz podanie danych uwierzytelniających dla konta rzeczywistego. Gdy użytkownik się zaloguje, łączysz się z użyciem zastrzeżonego konta, otrzymujesz poświadczenia dla prawdziwego konta, a następnie wykonujesz swoją pracę przy użyciu tego konta. Możesz również dość często zmieniać hasło SQL. Jeśli podejrzewasz użytkownika o nieczytelną grę, prześlij mu inną listę poświadczeń i śledź te poświadczenia.

+0

Myślę, że to lubię. Czy istnieją potencjalne problemy z tym rozwiązaniem? – MattR

+1

Jak wspomniał Paul Sasik, jeśli używane jest wspólne hasło, użytkownik z wystarczającym dostępem do własnego komputera może pobrać to hasło. Tak więc, chociaż zmniejszy to problem (tylko zalogowani użytkownicy mogą dowiedzieć się hasła SQL), to go nie eliminuje. Aby całkowicie go wyeliminować, musisz mieć coś pomiędzy użytkownikiem a bazą danych. – Yuliy

1

Oto problem. Ufasz użytkownikowi końcowemu binariów, które będą wywoływać zapytania MySQL. Oznacza to, poza cieniem wątpliwości, że sprytny użytkownik może "przejąć kontrolę" i bezpośrednio uruchamiać zapytania.

Są rzeczy, które możesz zrobić, aby poprawić sytuację. Wygląda na to, że jesteś w sieci LAN. Dlaczego nie możesz dać każdemu użytkownikowi własnego użytkownika bazy danych? Oznacza to, że uwierzytelnienie jest (a) załatwiane za ciebie i (b) możesz użyć "prawdziwych" uprawnień MySQL, aby ograniczyć szkodę, jaką mogą zrobić. Ponadto można użyć procedur przechowywanych i dać im dostęp tylko do proc, naprawdę ograniczając to, co mogą zrobić.

Możesz również rozważyć ponowne napisanie jako aplikacji internetowej, w której przetwarzasz wszystko na serwerze poza ich zasięgiem.

Czy jest tu jednak problem, czy tylko teoretycznie?

2

Dla klientów Winform, którzy łączą się bezpośrednio z bazą danych, jest to pytanie w wieku starszym (około 10 lat?), Które może nigdy nie zostać rozwiązane.

Problem polega na tym, że niezależnie od tego, jak zaszyfrujesz lub zaciemnisz ciąg połączenia, zawsze będzie punkt w czasie, w którym ciąg będzie reprezentowany jako zwykły tekst w pamięci komputera klienckiego, a zatem możliwy do hakowania.

Polecono Ci inne opcje, więc pomyślałem, że wskażę, co próbujesz obejść.