Сейчас на форуме: UniSoft, _MBK_, laslo (+9 невидимых)

 eXeL@B —› Программирование —› Delphi + MySQL
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 мая 2011 20:50
· Личное сообщение · #1

Есть MySQL база пошифрованная, новый файл создавать нельзя, вопрос: как к ней подключиться?
В теории: создаю Stream расшифровываю в него базу, потом к ней коннекчусь.
На практике: Каким образом законнектиться к Stream и возможно ли это вообще?
В идеале не поднимая дополнительно SQL сервера и не таская за собой левые dll...
Что для этих целей лучше заюзать?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 13 мая 2011 21:22
· Личное сообщение · #2

Isaev вы вообще походу теории не читали, хоть бы в вики заглянули на предмет MySQL. Что значит "пошифрованная" ? MySQL умеет хранить(на уровне файловой системы) таблицы в разных форматах, наиболее распространённые это MyISAM/ISAM и InnoDB, но как до них добраться я лично понятия не имею и врядли кто будет на таком низком уровне работать с этой СУБД. Stream - это вообще пипец какой-то, понятие уровня недоSQL серверов БД, если вы имеете ввиду прямое обращение к чанкам БД(уровень файловой системы) =\
по делу:
* MySQL сервер прийдётся поднимать, однозначно и ещё и помудохаться что б он подхватил те чанки, которые у вас есть.
* Что бы не таскать за собой левые dll пользуетесь официальным ODBC драйвером(хотя это, по сути, тоже dll), и через SQLAPI можно прекрасно подключаться к серверу БД и выполнять запросы, конечно, если, подключение по ODBC разрешено на стороне сервера, но это в первую очередь касается ОС linux в качестве серверной стороны. В виндовой реализации сервера MySQL с этим проблем быть не должно. Устанавливать в систему ODBC драйвер прийдётся однозначно (при варианте использования виндового SQLAPI, другой вариант рассмотрен ниже).
* Для делфи(вы же в делфи пишите, не так ли?) есть некий компонент для подключения к MySQL, называется MyDAC, каков он, на сколько удобен и что из себя представляет - понятия не имею, но есть вариант что при его использовании отпадёт нужда в установке ODBC драйвера, либо в использовании официальных dll для подключения к серверу БД.

-----
все багрепорты - в личные сообщения





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 мая 2011 22:05 · Поправил: Isaev
· Личное сообщение · #3

Да, на Delphi
HandMill пишет:
есть некий компонент для подключения к MySQL, называется MyDAC

есть так же ZEOSDBO, AnyDAC, Direct Mysql Objects, MyComponents by SciBit, DAC for MySQL by Microolap Technologies Ltd, ZeosLib и многие другие...

по делу:
К базе нужен доступ только на чтение, и SQL запросы, если это что-то меняет...
формат MyISAM думаю, файлы базы: .frm, .myd, .myi
HandMill пишет:
MySQL сервер прийдётся поднимать, однозначно

Как же сторонний софт работает с BD без установки серверов?
Или самой же программой можно мини-SQL-Server замутить, что бы она потом через него же и работала?

Задача, чтобы пользователь мог с флешки запускать софт, база в папке софта, чтобы не нужно было править реестр (т.к. не всегда есть права), что-то ставить или настраивать сервер
dll, в общем, приемлемый вариант.

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 13 мая 2011 22:40
· Личное сообщение · #4

Isaev пишет:
есть так же ZEOSDBO, AnyDAC, Direct Mysql Objects, MyComponents by SciBit, DAC for MySQL by Microolap Technologies Ltd, ZeosLib и многие другие...

я надеюсь это послужит ответом на следующий вопрос:
Isaev пишет:
В идеале не поднимая дополнительно SQL сервера и не таская за собой левые dll...

MySQL написан на плюсах и значит что врядли вы найдете реализации серверной части встраиваемой в делфи.
Isaev пишет:
Как же сторонний софт работает с BD без установки серверов?

Этот вопрос меня заинтересовал, только что загуглил, вот что нашёл, что из этого есть для работы из-под делфи - не знаю. Так же нашлось это. Там человек пишет об использовании MySQL Embedded + ZeosDBO + Delphi 7, получается что это как-то работает в связке.
Isaev пишет:
dll, в общем, приемлемый вариант.

Надеюсь теперь у Вас всё получится.

p.s.: интересно было бы почитать Ваше описание(если удосужитесь написать, конечно) о поднятии БД из чанков(на эмбеддед сервере или на обычном - не важно).

-----
все багрепорты - в личные сообщения





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 мая 2011 23:08 · Поправил: Isaev
· Личное сообщение · #5

HandMill пишет:
вы вообще походу теории не читали, хоть бы в вики заглянули на предмет MySQL.

Да теорию я читал, и работал с многими базами, просто обычно сервер ставил и не задумывался, т.к. в большинстве случаев надо было что-то из них достать не важно как
Такая задача встала впервые.

HandMill пишет:
Что значит "пошифрованная" ?

Абсолютно не важно... Например файл поксорен с константой

HandMill пишет:
Там человек пишет об использовании MySQL Embedded + ZeosDBO + Delphi 7, получается что это как-то работает в связке.

Спасибо, у меня этот момент как-то не нагуглился... Буду вникать

HandMill пишет:
о поднятии БД из чанков(на эмбеддед сервере или на обычном - не важно).

Если пойду всё же этим путём, то не проблема, опишу
Что такое чанки?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 14 мая 2011 00:10 · Поправил: HandMill
· Личное сообщение · #6

Isaev пишет:
Что такое чанки?

Набор файлов из которых собирается какая-то определённая БД.
Isaev пишет:
Абсолютно не важно... Например файл поксорен с константой

какой только долбо..б до этого додумывается!!! !!! Простите за злость, мне доводилось встречать людей, которые считали что это хорошо, вот только у некоторых из них мозг не позволял предусмотреть то что может дать сбой машина(по любой из причин: хоть то ОС выпадет в исключение, хоть сбой по питанию будет, либо антивирус ВНЕЗАПНО заблокирует доступ ОС к файловой системе) во время процесса шифрования, либо предусматривали через жопу! Даю совет тем кто проектирует "зашифрованные БД"(надеюсь Вас, Isaev, это не коснётся): либо пользуйтесь контрольными суммами и предусматривайте всевозможные сбои и сразу пишите утилиты для восстановления данных, либо храните данные внутри БД в "зашифрованном" виде.
PE_Kill пишет:
какой смысл тогда вообще использовать базу данных, если потом из нее нельзя делать условные выборки?

при нормальном подходе - можно делать условные выборки(с ориентацией не по всем полям, либо с применением SQL функций и ориентацией по любому из полей)

-----
все багрепорты - в личные сообщения





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 14 мая 2011 01:09
· Личное сообщение · #7

HandMill пишет:
либо храните данные внутри БД в "зашифрованном" виде

Вот это точно для долбаебов, какой смысл тогда вообще использовать базу данных, если потом из нее нельзя делать условные выборки? Тогда уж юзайте XML и виртуальные датасеты.

Насчет не юзать ниче стороннего. Обычно компилят сорсы сей в OBJ и линкуют к делфям, для SQLite в ZeosDBO так точно сделано, насчет MySQL не в курсе ибо ущербный компонент, как и 98% остальных.

-----
Yann Tiersen best and do not fuck





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 14 мая 2011 04:07
· Личное сообщение · #8

HandMill пишет:
Isaev пишет:Как же сторонний софт работает с BD без установки серверов? Этот вопрос меня заинтересовал, только что загуглил, вот что нашёл, что из этого есть для работы из-под делфи - не знаю.

Всё! Можно ж как импортировать, так и статически связывать. Работал с этой dll, не вижу проблем в её подключении на Delphi.

-----
IZ.RU





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 14 мая 2011 09:45
· Личное сообщение · #9

PE_Kill пишет:
Вот это точно для долбаебов, какой смысл тогда вообще использовать базу данных, если потом из нее нельзя делать условные выборки?

Так думаю, имелись ввиду предварительно пошифрованые записи (строки) плюс, допустим, такие же бинарные файлы в блобах.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 15 мая 2011 17:55 · Поправил: PE_Kill
· Личное сообщение · #10

ajax пишет:
Так думаю, имелись ввиду предварительно пошифрованые записи (строки)

Про это и речь. Тогда нельзя использовать выборки вида SELECT * FROM SomeTable WHERE Field1=(<,>,!=,LIKE) SomeValue

Можно конечно вешать дешифрующий триггер или пользовательскую функцию, но:
1) Такого ни разу не видел, ибо кто шифрует строки понятие не имеет об основах БД
2) Идут в ж*пу индексы, т.к. происходит денормализация базы данных и построчное считывание.

-----
Yann Tiersen best and do not fuck




Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 15 мая 2011 22:38
· Личное сообщение · #11

А я не понял, чем плохо шифровать файлы базы? Что они при шифровке зашифруются неправильно - бред, имхо. Они тогда точно так же могут записаться неправильно в открытом виде. Шифровать данные внутри БД - только если пароли хешировать, так то не шифровка. Может, архивами не пользоваться, SSL тоже?
Или проблема в том, что при апдейте базы придется переписывать пошифрованную копию целиком? Так писать в другой файл, потом заменять им старую базу. Либо успешно выполнится, либо старая база останется (как и в случае баз в открытом виде).



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 16 мая 2011 11:58
· Личное сообщение · #12

tomac пишет:
А я не понял, чем плохо шифровать файлы базы

тем что вы не в состоянии дать гарантии того что ещё до шифрования файлы БД не повреждены. После того как вы проводите шифрование гарантия целостности данных ложится на ваши плечи. И если данным уже крышка, то как вы можете гарантировать что это не ваши махинации с шифрованиями повредили данные?
tomac пишет:
Может, архивами не пользоваться, SSL тоже?

В большинстве архиваторов и в SSL гарантируется целостность данных благодаря проверке по контрольным суммам. Контроль целостности данных должен быть предусмотрен на уровне СУБД её разработчиками, соответственно и утилиты для восстановления повреждённых данных. Если вы разбираетесь от ... и до ... как устроен формат файлов(чанков) БД с которой работаете, пожалуйста, шифруйте их на здоровье, сколько душе угодно. Если же нет - сначала продумайте как вы будете восстанавливать данные после сбойного шифрования.
tomac пишет:
Либо успешно выполнится, либо старая база останется (как и в случае баз в открытом виде).

Не забудьте проверить в каком виде база на этапе подключения к ней.
Причины возможных "сбоев" я приводил выше, надеюсь Вы о них и без меня прекрасно знали. У меня есть печальный опыт работы с двумя программами: в одной не использовалось никакого шифрования базы, но был разрушительный сбой, в результате которого приходилось поднимать БД из бэкапа и вводить данные туда вручную. Во второй программе выходом была только переустановка, поскольку автор не предусмотрел возможность "неверного" выхода из программы (вместо кнопки "выход" в самой программе оператор давил на крестик, кто бы мог подумать?), часто ничего страшного не происходило, но однажды произошёл сбой(это в течении 1 месяца активного пользования программы-то!). В обоих случаях время простоя было критичным, в обоих случаях связаться с автором софта не было возможным(это вообще полный пизд..ц!!!). Можно представить что Вы(как разработчик программы) можете быть заняты(допустим по работе, уехали куда-то, к вам пришёл знакомый/новый клиент) в то время как кому-то критично время простоя и не сможете ответить на звонок/e-mail в течении 10 минут, либо в течении этого времени не в состоянии будете решить проблему. И что интересно - по шапке то получает не разработчик, а тот кто сидит на поддержке.
Если Вам недостаточно приведенных мною аргументов, Вы всё ещё шифруете файлы БД без знания формата файлов БД и у Вас всё нормально - я могу только искренне за Вас порадоваться.

-----
все багрепорты - в личные сообщения





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 18 мая 2011 04:03
· Личное сообщение · #13

Нашёл ещё пару интересных вариантов
Первый как раз для работы с таблицами в памяти: --> Link <--

И следующий подход к шифровке данных:
- При вставки записи получаем ХЭШ-значения для зашифрованных полей (хэши на исходные значения)
- Сохраняем эти хэши в той записе или другой таблице базы, но связываем по ID.
- Теперь, когда мы делаем выборку, то в SQL-запрос подставляем не искомые значения, а хэши на них, полученные точно таким же алгоритмом. Запрос возвращает зашифрованные данные, которые связаны с найденными хэшами.
-Расшифровываем данные на клиенте.

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 мая 2011 11:27
· Личное сообщение · #14

Isaev пишет:
Первый как раз для работы с таблицами в памяти:

ага, примерно это и имел ввиду, когда писал
PE_Kill пишет:
Тогда уж юзайте XML и виртуальные датасеты.

----------------------------------------------------------------------
Isaev пишет:
И следующий подход к шифровке данных

Собственно при таком подходе мне и непонятно зачем использовать базу данных вообще? Базу данных используют для нормализации данных, их гибкой обработки и быстрой обработки.
При шифровании значений у нас отваливается гибкая обработка (нельзя использовать условные выборки) и быстрая обработка, т.к. происходит построчное считывание. Отсюда вывод - зачем вообще база данных, только для нормализации данных?

Собственно если непонятно, то пример. Есть таблица, в которой одно из полей Фамилия. В таблице 10000 записей. Нам нужны все фамилии, начинающиеся на "Иван" (Иванов, Иванова, Иванеску,...), составляем запрос:
SELECT LastName FROM tblUsers WHERE LastName LIKE 'Иван%' ORDER BY LastName ASC
или частный случай
SELECT LastName FROM tblUsers WHERE LEFT(LastName, 4) = 'Иван' ORDER BY LastName ASC

При этом если драйвер базы хоть немного умеет оптимизировать, то он применит кластеризованый индекс и вернет данные за долю секунды, но даже без индексов драйвер будет выбирать данные постранично.

Если мы используем шифрование фамилий, как мы составим такой запрос? Никак, нам придется запросить все данные и перебрать их, у меня это занимает несколько секунд. А если записей 100000? И зачем тогда база, если мы один хрен выбираем все данные и все их обрабатываем?

-----
Yann Tiersen best and do not fuck





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 18 мая 2011 13:27
· Личное сообщение · #15

PE_Kill пишет:
Собственно при таком подходе мне и непонятно зачем использовать базу данных вообще?

тупо для совместимости online и offline версии
online лежит на сервере и используется там в полную силу
в offline нужны некоторые выборки из данных, которые скрипт успешно возвращает, но заказчик боится утечки... И никак ему не объяснить, что если программа эти данные показывает (читать использует), то хоть RSA 2048 накрой, всё равно утечка будет, если кому-то это будет нужно!
Потому скрипт будет написан так, чтобы данные в чистом виде не отдавать! Это конечно всё чушь наблюдая со стороны, но хозяин-барин! Видимо просто от базы уйдём и пусть скрипт возвращает бинарник в любом виде, хотя имея возможность SQL запросов, работать с данными было бы удобнее.
Придётся воссоздать её в друхсвяхных списках видимо и работать по-старинке
PE_Kill пишет:
Собственно если непонятно, то пример. Есть таблица, в которой одно из полей Фамилия. В таблице 10000 записей. Нам нужны все фамилии, начинающиеся на "Иван" (Иванов, Иванова, Иванеску,...), составляем запрос:SELECT LastName FROM tblUsers WHERE LastName LIKE 'Иван%' ORDER BY LastName ASC

Да это понятно, что запросы с выбором по части строки идут тогда лесом, но остаётся возможность запроса по значениям, а этого вполне в данном случае хватает.

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



 eXeL@B —› Программирование —› Delphi + MySQL
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати