Połączenie się programu z bazą MySQL

0

Witam.

Mam taki problem. Chcę aby mój program łączył się z bazą MySQL. Nie chce trzymać tego hasła w programie, ponieważ w ten sposób narażam się na łatwe przechwycenie go. Chciałbym żeby mój program obsługiwał około 100 użytkowników. Każdy z nich pobierał by z tej bazy przez mój program jakieś rekordy, oraz dodawał je.
Macie jakiś pomysł? Szukałem na google jak zrobić to za pomocą wywoływania skryptu php, ale nie znalazłem żadnych przykładów które bym zrozumiał. Jeśli ktoś wie jak się takie rzeczy robi to proszę o wytłumaczenie jak wymieniać dane między aplikacją a skryptami umieszczonymi na serwerze.

0

no to słabo szukałeś.. szukaj dalej.. np. komponenty ADO

0
zajcev napisał(a)

no to słabo szukałeś.. szukaj dalej.. np. komponenty ADO

Nie chcę gotowca, nie jestem leniwy, ale nic nie znalazłem. :(((((

Proszę o więcej wskazówek

To coś na pewno działa z MySQL-em?

0

Większość instalacji MySQL ma dołączoną libmysql.dll/libmysql.so - natywny klient, wraz z plikiem nagłówkowym w C.

0

Plik libmysql.dll jest potrzeby mi do łączenia się za pomocą komponentu ZeosLib, więc go posiadam. Ale co dalej?

0

odpowiadając na komentarz: _13th_Dragon

Przejrzałem teraz dokumentacje ale nic nie znalazłem. Może ktoś zarzucić jakimś przykładowym algorytmem. Przecież ludzie piszą setki programów które korespondują z MySQL więc nie wierze, że mój problem jest jakoś wyjątkowy. Proszę o jakiś przykład bo tak to się nie dogadamy chyba. Rozumiem, że na tym forum ci którzy nie mają 100 postów są traktowani jak gó**o

0

Coś nie rozumiem, masz na myśli że musisz w programie trzymać hasło ale nie chcesz bo ktoś może zdebugować kod?
Jeżeli tego dotyczy całe pytanie to odpowiedź jest prosta - nie da się.
Aby wywołać funkcję łączącą się z bazą musisz podać hasło, czyli hasło musi być już w jakieś zmiennej, wystarczy znaleźć wywołanie łączenia się i zobaczyć co jest przekazane jako czwarty (na ile dobrze pamiętam) parametr.
Owszem można nie trzymać tego hasła jawnie, aby nie można było przynajmniej przeczytać tego hasła oglądając exe w notatniku (do tego nawet algorytm cezara się nadaje, albo xor Key).

0

Owszem można nie trzymać tego hasła jawnie, aby nie można było przynajmniej przeczytać tego hasła oglądając exe w notatniku (do tego nawet algorytm cezara się nadaje, albo xor Key).

Te algorytmy dają są słabe zabezpieczenie.
Mój problem to przypominam. Mam bazę MySQL z której będą korzystać użytkownicy przez program który im napisze. Chce aby pobierali z nich rekordy, ale nie mieli dostępu do danych takich jak hasło i login do bazy (np. po dekompilacji o której pisałeś).

Dragon a wiesz może czy da się to zrobić przez te komponenty o których wspomniał Zajcev.

Mój jedyny pomysł to jakoś wymiana danych przez skrypty PHP, ale nie wiem jak to się robi z poziomu aplikacji delphi.

0

To o czym wspominał kolega ADO to sposób połączenia do dowolnej bazy SQL'owej, on też nie zrozumiał o co ci chodzi.
Te algorytmy o których napisałem wyżej są zupełnie wystarczające aby nie dało się podejrzeć hasła notepad'em.
Ponieważ nawet jak zrobisz zabezpieczenie tego hasła milion-bitowym RSA to i tak nie uchroni to tego hasła przed debugier'em, ponieważ przed wywołaniem funkcji/metody łączenia się do bazy musisz to hasło rozkodować.

Przez PHP da się to zrobić z tym że w takim przypadku te dane będą ogólnie dostępne nawet bez hasła i twojego programu, a jak zabezpieczysz hasłem to nadał te same problemy.
Na 100% bezpieczeństwo nie ma przepisu, gdyby był to już dawno by wyeliminowano wszystkie włamania, wirusy i inne podobne rzeczy.

0

Wiem, że nie ma 100% pewności zabezpieczenia tego, ale np. programy typu Gadu Gadu muszą łączyć się jakoś ze swoją bazą użytkowników by sprawdzić np. hasło, czy pobierać rekordy gdy np. szukamy kogoś z katalogu GG. Mniejsza o to.

Skoro przez przeglądarkę internetową mogę wywołać skrypt PHP który pobiera mi jakieś rekordy z bazy MYSQL (i dane takie jak hasło do bazy jest moim zdaniem dobrze zabezpieczone) to dlaczego nie można by tego przez delphi zrobić.

Przecież nawet przez głupiego WebBrowsera bym to zrobił, ale moim zdaniem musi być na to jakiś mniej prymitywny sposób. Czy przypadkiem komponent IdHTTP1 do tego by się nie nadawał?

0

Łaczenie z bazą MySQL przez Zeosa w OnCreate:

try
    with ZConnection do
    begin
      HostName:= 'localhost';
      Password:= 'hasło';
      Protocol:= 'mysql-5';
      ReadOnly:= False;
      User    := 'root'; // nie polecam roota. zrób sobie innego usera i nadaj mu minimalne uprawnienia
      Database:= 'server_db';
      Connect;
    end;
  except
    on E:Exception do
    begin
      ServerLog.Lines.Add(TimeToStr(Time) + ': Bląd połączenia bazy danych MySQL: ' + E.Message);
    end;
  end;

Przykładowe zapytanie SELECT:

      Result:= GenereID;
      try
        ZQuery.SQL.Clear;
        ZQuery.SQL.Add('SELECT ID FROM uzyszkodnik WHERE ID=' + IntToStr(Result));
        ZQuery.Open; // gdy interesuja nas wyniki zapytania
        ID_db:= Form1.ZQuery.FieldByName('ID').AsInteger;// wydłubujemy wynik zapytania
      finally
        ZQuery.Close;
      end;
      if ID_db = 0 then
        Komunikat('Wal się na ryj. Nie ma takiego szkodnika.');

Polecenie INSERT:

       try
        ZQuery.SQL.Clear;
        ZQuery.SQL.Add('INSERT INTO file VALUES(NULL, :iduzyszkodnika, :filename)');
        ZQuery.ParamByName('iduzyszkodnika').AsInteger:= ID;
        ZQuery.ParamByName('filename').AsString:= FileName;
        ZQuery.ExecSQL;// gdy zapytanie ma sie wykonac a wyniki nas nie interesuja
      finally
        ZQuery.Close;
      end;

a w OnClose:

    with ZConnection do
    begin
      Disconnect;
    end;
0

Fąfara dzięki za dobre chęci ale to mi nic ni daje.

Ludzie ja wiem jak się łączyć z bazą, ale nie wiem jak robić to tak, żeby HASŁO TRZYMAĆ W BEZPIECZNYM MIEJSCU - CZYLI NIE W PROGRAMIE!!!
Czy ja pisze po chińsku?

0

To robisz to tak.
Ściągasz DCPCrypt.
Wpisujesz hasło w programie i je hashujesz DCP_SHA512 albo DCP_MD5 (nie polecam).
Wysyłasz to na serwer ktory sprawdzi czy jest taki hash w bazie.
Nie rozwiązuje to wielu problemów bezpieczeństwa, ale masz punkt zaczepienia.

0

Wysyłasz to na serwer ktory sprawdzi czy jest taki hash w bazie.

A hasło do tej bazy która ma mi sprawdzić hash hasła do bazy gdzie mam niby trzymać?? :)

0

Ale GG nie kryje tego dostępu, jest nawet biblioteka (pod delphi też działa) która pozwala samemu napisać klienta GG.
Zadaj sobie pytanie, poco zabezpieczasz bazę hasłem? Aby osoby niepowołane nie mieli dostępu do danych. Jeżeli zrobisz "omijarkę" przez PHP to osoby niepowołane będą mieć dostęp do danych. Czyli rozwiązanie z PHP jest jeszcze gorsze niż nawet wszycie hasła do programu. Dowolny sniffer pokaże z którą stroną łączy się twój program i jakie parametry podje. IdHttp jak najbardziej nadaje się do przejścia przez "omijarkę".

0
_13th_Dragon napisał(a)

Ale GG nie kryje tego dostępu, jest nawet biblioteka (pod delphi też działa) która pozwala samemu napisać klienta GG.
Zadaj sobie pytanie, poco zabezpieczasz bazę hasłem? Aby osoby niepowołane nie mieli dostępu do danych. Jeżeli zrobisz "omijarkę" przez PHP to osoby niepowołane będą mieć dostęp do danych. Czyli rozwiązanie z PHP jest jeszcze gorsze niż nawet wszycie hasła do programu. Dowolny sniffer pokaże z którą stroną łączy się twój program i jakie parametry podje. IdHttp jak najbardziej nadaje się do przejścia przez "omijarkę".

Skoro IdHttp nadaje się to jak tego używać? Można prosić o jakiś przykład?

0

To element pakietu Indy. Mozna go pobrać stąd, ale wolno się ładuje strona:
http://web.archive.org/web/20070122043958/www.atozed.com/indy/Plus/Files.en.aspx
ale szybciej będzie z przykładami, gdzie całość wrzuciłem pod poniższy adres:
http://www.speedyshare.com/files/27470813/indy9_plus_samples.rar
Ja jednak wiem, że na przykład z wersją 10 bywają problemy, ale nie wiem czy na pewno w IdHttp. Od siebie mogę polecić jednak pakiet Synapse, imo łatwiejszy w obsłudze, nie trzeba go instalować tylko dynamicznie używac. Znajdziesz go, dokumentacje, jak i przykłady na stronie projektu:
http://www.ararat.cz/synapse
wielu tutaj nie nawidzi zarówno samego pakietu jak i mnie za jego polecanie, ale przykładów na temat użycia THttpSend wchodzącego w jego skład, napisałem na tym forum tyle, że aż można mieć dosyć, ale jest w czym przebierać i z czego wziąć przykład. Wystarczy poszukać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1