Topic: API или прямое соединение с базой данных

мне нужно что бы программа соединялась с MySQL в сети, программа естественно массового пользования..
думал реализовать работу с БД через API, но это долго реализовывать
возник такой вопрос ...
если программа будет соединятся прямо с БД в сети какой могут возникнуть проблемы? или я зря переживаю? и если парраметры соединения будут прописаны в скрипте возможно это дело декомпилировать или это не совсем реально?

Re: API или прямое соединение с базой данных

Первую часть вопроса к сожалению не понял.


Сохранять пароль непосредственно в скрипте конечно же плохая идея, лучше всего, когда пользователь каждый раз при соединении вводить пароль.


Но можете его предварительно зашифровать

var
    sEncryptedPass: string;
begin
    // генерируем зашиврованный пароль
    sEncryptedPass := EncryptRC5('password', 'keytoencrypt');
    ShowMessage(sEncryptedPass); // получаем зашифрованный пароль 74805FB15BCB1F96607B45FCA0532D5BE446286F2496430300000000

когда появится сообщение, нажмите Ctrl+C, чтобы скопировать полученный пароль в буфер обмена


затем используйте зашифрованный пароль при подключении таким вот образом

    MySQL.Password := DecryptRC5('74805FB15BCB1F96607B45FCA0532D5BE446286F2496430300000000', 'keytoencrypt');


Не сказал бы, что это надежная защита для хранения пароля, но пригодна против большинства пользователей.
Также лучше использовать SSL подключение к серверу, иначе пароль легко узнать, прочитав трафик.


Файл скрипта script.pas из папки проекта Script необходимо удалить, оставив только файл script.dcu

Dmitry.

3 (edited by sibprogsistem 2019-05-01 13:42:57)

Re: API или прямое соединение с базой данных

DriveSoft wrote:

Также лучше использовать SSL подключение к серверу

это вроди протокол HTTPS , я правильно понимаю?

Re: API или прямое соединение с базой данных

Да, тут можете найти пример
http://myvisualdatabase.com/forum/viewtopic.php?id=4274

Dmitry.

Re: API или прямое соединение с базой данных

procedure frmlogin_OnShow (Sender: string; Action: string);
begin

     frmWait.Show;
     Application.ProcessMessages;
     {$MySQL disable_connectdialog}
     frm_login.MySQLConnection.Server := 192.168.0.5;
     frm_login.MySQLConnection.Port := 3306;
     frm_login.MySQLConnection.Username := 'root';
     frm_login.MySQLConnection.Password := DecryptRC5('826C589632S1385AD207EEC08E12FC501B7C12030E446286F249643030000', 'keytoencrypt');
     frm_login.MySQLConnection.Database := kart;

     try
         frm_login.MySQLConnection.Connect;
     except
         frmWait.Close;
         ShowMessage('Can''t connect to database.');
         frm_login.Close;
     end;
                     
Выводит окно ошибки:
ShowMessage('Can''t connect to database.');

Если просто значение
  frm_login.MySQLConnection.Password := 'password'
то работает

Re: API или прямое соединение с базой данных

Проверьте, правильно ли выглядит расшифрованный пароль

ShowMessage( DecryptRC5('826C589632S1385AD207EEC08E12FC501B7C12030E446286F249643030000', 'keytoencrypt') );
Dmitry.

7 (edited by Andrei 2019-06-14 05:18:09)

Re: API или прямое соединение с базой данных

DriveSoft wrote:

Проверьте, правильно ли выглядит расшифрованный пароль

ShowMessage( DecryptRC5('826C589632S1385AD207EEC08E12FC501B7C12030E446286F249643030000', 'keytoencrypt') );

Да правильно.
Проверить вы не могли, я изменил несколько знаков.

Вот пример с "password", тоже не работает.
frmWait.Show;
     Application.ProcessMessages;
     {$MySQL disable_connectdialog}
     frm_login.MySQLConnection.Server := '198.168.0.5';
     frm_login.MySQLConnection.Port := 3306;
     frm_login.MySQLConnection.Username := 'root';
     frm_login.MySQLConnection.Password := DecryptRC5('74805FB15BCB1F96607B45FCA0532D5BE446286F2496430300000000', 'keytoencrypt');
     frm_login.MySQLConnection.Database := 'kart';

Re: API или прямое соединение с базой данных

Andrei wrote:
DriveSoft wrote:

Проверьте, правильно ли выглядит расшифрованный пароль

ShowMessage( DecryptRC5('826C589632S1385AD207EEC08E12FC501B7C12030E446286F249643030000', 'keytoencrypt') );

Да правильно.
Проверить вы не могли, я изменил несколько знаков.

Вот пример с "password", тоже не работает.
frmWait.Show;
     Application.ProcessMessages;
     {$MySQL disable_connectdialog}
     frm_login.MySQLConnection.Server := '198.168.0.5';
     frm_login.MySQLConnection.Port := 3306;
     frm_login.MySQLConnection.Username := 'root';
     frm_login.MySQLConnection.Password := DecryptRC5('74805FB15BCB1F96607B45FCA0532D5BE446286F2496430300000000', 'keytoencrypt');
     frm_login.MySQLConnection.Database := 'kart';

видимо программа сравнивает шифр с не шифрованным текстом... сделайте на оброт... шифр запишите в базу и при подключении шифруйте сам текст и сравнивайте сам шир..

у меня было такое же кода я создавал активацию.. визуально программа шифрова и сравнивала и все было ок.. но как только перешел в реестр сразу сравнение перестало работать...

Re: API или прямое соединение с базой данных

Была ошибка в функции DecryptRC5, поправил. Скачайте пожалуйста последнюю бета версию, теперь должно работать
https://www.dropbox.com/s/to42wv53pdc0g … a.zip?dl=0

Dmitry.

Re: API или прямое соединение с базой данных

Дмитрий Здравствуйте
Не могли бы написать скрипт для API связи программы c ATC  станцией. Скрипты от АТС есть, их надо внедрить программы, готов оплотить услугу, или посоветуйте программиста кто бы мог это написать   
почтовый адрес apc.05@yandex.ru

Re: API или прямое соединение с базой данных

Дмитрий Здравствуйте
Не могли бы написать скрипт для API связи программы c ATC  станцией. Скрипты от АТС есть, их надо внедрить программы, готов оплотить услугу, или посоветуйте программиста кто бы мог это написать   
почтовый адрес apc.05@yandex.ru