Połączenie się programu z bazą MySQL

Piotruch88
2011-03-17 18:45
Piotruch88
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.

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-03-17 20:01

Rejestracja: 12 lat temu

Ostatnio: 2 lata temu

0

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

Pozostało 580 znaków

2011-03-17 23:12

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

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?

edytowany 1x, ostatnio: Piotruch88, 2011-03-17 23:14

Pozostało 580 znaków

2011-03-17 23:22

Rejestracja: 14 lat temu

Ostatnio: 1 dzień temu

0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2011-03-17 23:36

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

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

Dalej zaczynasz czytać dokumentacje ZeosLib. - _13th_Dragon 2011-03-18 00:18

Pozostało 580 znaków

2011-03-18 10:46

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

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

Pozostało 580 znaków

2011-03-18 12:19

Rejestracja: 14 lat temu

Ostatnio: 1 dzień temu

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).


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2011-03-18 12:30

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

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.

edytowany 2x, ostatnio: Piotruch88, 2011-03-18 12:31

Pozostało 580 znaków

2011-03-18 13:18

Rejestracja: 14 lat temu

Ostatnio: 1 dzień temu

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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2011-03-18 13:45

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

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ł?

edytowany 1x, ostatnio: Piotruch88, 2011-03-18 14:12

Pozostało 580 znaków

Fąfara
2011-03-18 14:18
Fąfara
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;

Pozostało 580 znaków

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