Создание НАСТОЯЩЕГО приложения базы данных с использованием Datasnap

Я создал обширное двухуровневое приложение в D2010, используя ADO и devexpress. Я хочу обновить это до использования Datasnap в основном для обеспечения связи HTTPS, а не только TCP/IP для уязвимого SQL-сервера. Я просмотрел все руководства по Datasnap, которые смог найти. У меня есть Delphi In Depth Кэри Дженсена: ClientDatasets. Все хорошо и хорошо, но примеры довольно бесполезны, потому что в РЕАЛЬНОМ приложении базы данных сетки заполняются путем объединения нескольких таблиц и почти никогда из одной таблицы. Это устраняет возможность «авторазрешения» клиентских наборов данных с самого начала. Даже предложенные обработчики событий beforeupdateevent не будут работать в приложении привязки данных, поскольку БД доступна только для сервера привязки данных. Поэтому мне кажется, что я должен создать метод на сервере привязки данных для КАЖДОЙ вставки/обновления, которая мне понадобится, затем предоставить эти методы клиенту и вызвать их от клиента по мере необходимости, чтобы запросить сервер привязки данных для выполнения требуемого обновление/вставки. Это кажется большой работой!

Есть ли более простой способ реализации https-коммуникаций на SQL Server?

О, если вам интересно, приложение уже является псевдо-трехуровневым в том смысле, что сетки подключены к TdxMemData, а не напрямую к TADOQueries. Я сам обрабатываю все вставки/обновления так же, как если бы я использовал TClientdatasets.


person Freddie Bell    schedule 16.10.2011    source источник
comment
Прочтите это. Кроме того, определите НАСТОЯЩЕЕ приложение БД в отличие от других, ваше текущее определение не удовлетворяет.   -  person Premature Optimization    schedule 16.10.2011
comment
Или взгляните на ORM, включая ORM клиент-сервер (например, наш mORMot, который реализует его поверх механизм RESTful). Используя JSON и поставляемую нами оболочку сетки, вы можете присоединиться к любой таблице и получить содержимое соответствующих строк в формате JSON.   -  person Arnaud Bouchez    schedule 16.10.2011
comment
РЕАЛЬНОЕ не определено. Что такое РЕАЛЬНО? Какое отношение легкое имеет к реальному? Вы хотите хорошо, или вы хотите легко? НИКАКОЕ количество подключений компонентов в приложении не делает ваше приложение многоуровневым. Если у вас есть толстый клиент и база данных SQL, у вас есть двухуровневое приложение.   -  person Warren P    schedule 16.10.2011


Ответы (2)


Если вы считаете, что ваша база данных уязвима, дважды подумайте об использовании D2010 Datasnap. Оно очень, очень уязвимо. Не дайте себя обмануть HTTPS, для полной защиты канала по-прежнему не хватает многих элементов. Например, как только вы используете Datasnap, встроенная проверка подлинности Windows SQL-сервера (на основе Kerberos...) исчезнет.

Полное объяснение см. в разделе Почему Datasnap 2010 – это игрушка-библиотека. Это, конечно, мое личное мнение, но оно основано на моем опыте использования Midas/Datasnap, начиная с Delphi 3, и моей текущей работе в области ИТ-безопасности.

В любом случае вы ошибаетесь насчет вставки/обновления/удаления. Вы должны использовать события провайдеров, чтобы управлять ими на стороне сервера datasnao. Это немного сложнее, чем обрабатывать их в двухуровневом приложении, но вам не нужны специальные методы для каждой операции.

person Community    schedule 16.10.2011
comment
Это неправильно понимает привязку данных, ИМО. Вы не должны выставлять необработанный порт MS SQL 1433 в Интернет. Datasnap предназначен для публичного просмотра. ИТ-отдел по-прежнему зависит от вас, чтобы разработать свои собственные общедоступные API-интерфейсы, но из-за дополнительной работы, ценность которой ОП ставит под сомнение, это тот самый уровень безопасности и целостности, который должен был обеспечить средний уровень. - person Warren P; 16.10.2011
comment
Мне интересно узнать больше об уязвимости datasnap. У вас есть ссылки? - person Birger; 16.10.2011
comment
Я думаю, что это личное мнение LdSandon и, скорее всего, цитат нет. - person Warren P; 17.10.2011
comment
Warren P. AFAIK является сотрудником Embarcadero, и поэтому его мнение является мнением компании. См. ссылку, которую я добавил о нескольких недостатках в безопасности Datasnap - это, конечно, мое личное мнение, но если бы Embarcadero вместо того, чтобы тратить время на отрицание недостатков, посвятил бы их исправлению, это было бы более продуктивно. - person ; 17.10.2011
comment
Datasnap никогда не предназначался для публичного доступа. Поддержка HTTP/HTTPS не означает, что она должна быть общедоступной, любое приложение, использующее HTTP(S), может легко выявить серьезные недостатки безопасности, потому что нужно реализовать гораздо больше, чем каким-то образом защитить транспорт. Сделайте это неправильно, и может быть более безопасным открыть порт SQL Server напрямую. Добавление уровня не улучшит безопасность и целостность автоматически, на самом деле это может уменьшить их, если структура среднего уровня спроектирована неправильно. - person ; 17.10.2011
comment
Я не являюсь сотрудником Embarcadero. Мои мнения являются моими собственными. - person Warren P; 17.10.2011
comment
@Warren P: Я извиняюсь за свою ошибку - мне просто жаль, что я не могу изменить комментарий. - person ; 17.10.2011
comment
Я не согласен с мнением LDSandon о DataSnap в связанной статье, особенно об аутентификации. Возможно, он хочет, чтобы он предоставил стандартную технику аутентификации. Я предпочел бы создать свой собственный, который я не обязательно хотел бы документировать публично. DataSnap теперь уже не игрушка, кстати, в XE2 появилось несколько отличных новых вещей, я только что слушал об этом на сегодняшних сессиях CodeRage 6. - person Warren P; 17.10.2011
comment
Сделай сам — это безопасность, как правило, путь к катастрофе. Есть несколько способов сделать это правильно и много способов сделать это неправильно. Безопасность за счет неясности обычно не является хорошим подходом. Если вы не сильно запутываете свой исполняемый файл, отменить его довольно легко. Обычно гораздо лучше полагаться на известные, хорошо протестированные стандарты, если только у вас нет глубоких знаний, необходимых для реализации вашего механизма аутентификации. Но вам, возможно, придется также принять во внимание возможность взаимодействия, если компания развернула AD, почему ее администраторы должны иметь дело с базой данных еще одного пользователя? - person ; 17.10.2011
comment
Многие люди говорят, что безопасность за счет неясности — это путь к катастрофе, и все же шифрование — это просто форма математической неясности, требующей больших вычислительных ресурсов. Вся безопасность является лишь частичной, временной и уязвимой. Сколько банков обнародуют все свои меры безопасности? Нуль. Там. - person Warren P; 17.09.2012

[Обновление 2016 года: DataSnap в 2016 году еще более прискорбно отстает с точки зрения безопасности и функций, чем это было, когда этот вопрос был написан. Я вообще не рекомендую его использовать в каких-либо новых проектах.]

DataSnap — это решение проблемы построения многоуровневых (трех и более) приложений. Прямое подключение к SQL через Интернет из толстого клиента, который содержит всю бизнес-логику в клиенте, имеет много хорошо понятных проблем, в том числе тот факт, что изменения бизнес-логики требуют, чтобы вы обновили ВСЕ ваши клиенты одновременно. Улучшение среднего уровня (изменение бизнес-логики), которое находится внутри вашей логики привязки данных (или другой) среднего уровня, не распространяется на каждого клиента. Клиенты тоньше и содержат меньше бизнес-логики. Во-вторых, хорошо спроектированный «API» для привязки данных, который вы создаете самостоятельно, подвергает вас только рискам, которые вы сами создаете, а не подвергает вас всему набору уязвимостей MS SQL.

Откровенно говоря, потеря аутентификации Kerberos из вашего толстого клиента — не повод отказываться от идеи промежуточного уровня. Я вообще не понимаю, о чем здесь ldsandon. Выступает ли он за двухуровневую архитектуру приложений, которая подключается к клиентам Интернета или локальной сети и содержит всю бизнес-логику, как «более безопасную», чем многоуровневое приложение?

Скрытый вопрос, предложенный вашим заголовком, не имеет ответа и не определен. Что значит "настоящий"? Многие отрасли используют двухуровневые толстые клиенты внутри своих корпоративных локальных сетей. Многие сочли выгодным использовать промежуточный уровень внутри своей собственной локальной сети, и многие обнаружили, что внешние приложения, работающие через Интернет, определенно НЕ должны использовать SQL-подключение к толстым клиентам, и поэтому они предоставляют своего рода «веб-метод» (SOAP, REST+JSON и т. д.). Было тщательно указано, что Data-Snap не является чисто «RESTful» архитектурой, но она использует JSON и во многих отношениях является REST-ful по дизайну, хотя и не полностью.

Если вы не понимаете проблемы, для решения которой был создан DataSnap, легко подумать, что DataSnap бесполезен или (в качестве альтернативы и в равной степени ошибочен) своего рода серебряной пули. Он существует для определенной цели, которую многие люди считают полезной для своих нужд развития. Если вы намерены взять на себя работу по созданию среднего уровня, DataSnap сделает это проще, чем сделать это на 100% как «создание собственного среднего уровня», но это больше работы, чем отсутствие среднего уровня.

person Warren P    schedule 16.10.2011
comment
Нет, я выступаю за использование фреймворков удаленного взаимодействия с правильно разработанной системой безопасности. К слову, старый Datasnap на основе DCOM гораздо более безопасен, хотя его очень сложно настроить вне домена и через брандмауэры. Новый не был разработан с учетом требований безопасности, и попытки его модернизации были очень плохими, с отсутствием функций и с использованием неизвестных алгоритмов. В любом случае, сегодня двухуровневое приложение через VPN было бы гораздо более безопасным, чем приложения Datasnap, а после его фиаско сам SQL Server стал намного более безопасным, MS понимала безопасность, а Embarcadero — нет. - person ; 17.10.2011
comment
Да, я вообще не вижу себя в развертывании непосредственно в Интернете с помощью DataSnap. Я отлично провел время с RemObjects DataAbstract в качестве системы среднего уровня, но в современной защищенной сети я бы полностью отказался от Delphi и предпочел бы .net. - person Warren P; 25.08.2016