2013-04-12 11 views
5

Pracuję nad projektem C++, który potrzebuje dostępu do bazy danych, aby odczytać jej wejście.Jak ukryć hasło bazy danych w pliku konfiguracyjnym

Do tej pory użyliśmy domyślnej nazwy użytkownika (postgres) i hasła "ustalony tekst jawny", wraz z wieloma innymi ustawieniami, w pliku konfiguracyjnym opartym na XML.

Teraz potrzebuję ukryć hasło przed użytkownikami, gdy dostarczę plik konfiguracyjny.

FYI: obszarem rozwoju jest linux, baza danych to postgresql. chcielibyśmy dać użytkownikom plik konfiguracyjny, aby połączyć się z bazą danych i używać go bez znajomości hasła

będę wdzięczny, jeśli wskazują na szybki i łatwy dostęp. (mała lektura będzie również wielki)

dziękuję

+2

Jeśli bazą danych jest serwer SQL, należy użyć uwierzytelniania systemu Windows, aby nie przechowywać hasła. –

+0

@Brianbeuning obszar rozwoju to linux, baza danych to postgresql. chcielibyśmy dać użytkownikom plik konfiguracyjny do połączenia się z bazą danych i używać go bez znajomości hasła. – rahman

+2

Jedynym bezpiecznym rozwiązaniem jest wprowadzenie hasła przy każdym uruchomieniu programu. Jeśli zaszyfrujesz hasło, musisz gdzieś ukryć klucz w swoim programie. Klucz można znaleźć, ale wysiłek wymagany do uzyskania hasła wzrasta. –

Odpowiedz

6

Nie można zapobiec uzyskaniu tego hasła przez niewłaściwego użytkownika w przypadku przesłania mu programu zawierającego go w dowolnej formie.

Ale istnieją dwa potencjalne rozwiązania:

  1. Użytkownik i hasło, które wysyła do programu mają dostęp tylko do odczytu do bazy danych;

  2. Program nie łączy się bezpośrednio z bazą danych. Żąda danych do aplikacji serwera, która może nie tylko pobierać te dane z rzeczywistej bazy danych bez potrzeby podawania użytkownikowi żadnego hasła, ale także może przeprowadzać odpowiednie kontrole bezpieczeństwa, aby zapewnić, że ten użytkownik uzyskuje dostęp tylko do danych, do których ma służyć itp.

+0

Pierwsze rozwiązanie może nadal pozwalać użytkownikowi na przeglądanie bazy danych, czego dokładnie nie chcę. Drugie rozwiązanie wygląda ładnie, ale "też" jest dla mnie idealne. Potrzebuję znacznie prostszego rozwiązania, które nie wymaga serwera itp. – rahman

+0

Być może tylko dajesz dostęp do niektórych tabel? To wiele zależy od konkretnego problemu. W każdym razie powinieneś rozważyć drugie rozwiązanie, nawet jeśli opóźni twój projekt o kilka dni. – Havenard

+1

Jeśli chcesz sugestię, możesz szybko zaimplementować coś podobnego za pomocą PHP. Twój program wykonuje żądania HTTP do skryptu PHP z niezbędnymi parametrami, a PHP zwróci żądane dane w formacie XML lub JSON. Twój program to analizuje, a sztuczka jest wykonywana. – Havenard

-5

Używamy MD5 do szyfrowania hasła w pliku konfiguracyjnym.

+2

MD5 to algorytm jednokierunkowego mieszania. Hashowanie hasła spowodowałoby, że wszystko stałoby się nieczytelne *, włącznie z * aplikacją. A MD5 jest ogólnie uważany za kiepski wybór w odniesieniu do wszelkich kwestii związanych z bezpieczeństwem. –

4

Możesz mieć inne hasło "zakodowane", używane do szyfrowania hasła w pliku konfiguracyjnym. Więc wpisujesz hasło zaszyfrowanej bazy danych (db_password) do pliku konfiguracyjnego, a następnie, gdy potrzebujesz dostępu do bazy danych, odszyfrujesz hasło_bazy_danych za pomocą twardego hasła. Oczywiście nadal można odzyskać hasło za pomocą dekompilatora, ale nie będzie to łatwe.

+0

Jest to łatwiejsze niż myślisz. Prosty program do debugowania sieci, taki jak Wireshark, może przechwytywać to hasło z ruchu sieciowego, gdy aplikacja łączy się z bazą danych. Możesz użyć najbardziej wyrafinowanego szyfrowania na świecie, aby chronić to hasło w pliku XML i nie ma tu żadnej różnicy. – Havenard

+0

@Havenard Czytałem również twoją odpowiedź. Próbuję znaleźć drugie rozwiązanie, ale nie będzie to łatwe i wykonalne w ciągu 1-2 dni, chyba że przeszacowuję. – rahman

+0

FreeNickname Twoje rozwiązanie jest łatwe (choć łatwe do złamania).Nadal może być czasowo odpowiedzieć na moje żądanie. Spróbuję, ale potrzebuję referencji dla łatwego szyfrowania/deszyfrowania w C++. czy możesz mi z tym pomóc? – rahman