Мне действительно не нравится концепция открытия моих серверов SQL в интернете - даже если я могу заблокировать брандмауэр. Однако я всегда работал напрямую с базами данных. Сейчас я строю систему, которая включает в себя 1 базу данных SQL Server, веб-приложение в ASP.NET/C# и несколько приложений Windows в Delphi XE2. Но с самого начала я хотел бы установить какой-то «фильтр» вокруг базы данных, чтобы мне не нужно было его открывать.
Я знаю, что есть много вещей для этого, но ничего не знаю о них или что получить для моего сценария. Я хотел бы оставить его родным для SQL Server; Я не планирую использовать какой-либо другой тип базы данных.
Он должен быть подключен от клиента к серверу другими способами, чем стандартное соединение SQL, например фильтр. Он создает свои собственные зашифрованные пакеты и передает данные по-своему. У меня будет класс-оболочка для Delphi и C #, который в значительной степени будет идентичен - и я смогу передавать свои данные в DLL для взаимодействия с БД.
Теперь я могу сделать это тремя разными способами ...
- Полная оболочка SQL Server, скорее всего, без исходного кода, может даже иметь свой собственный язык (я не хочу выбирать другой язык базы данных) и не зависеть от моего проекта как отдельная отдельная система.
- Оболочка с открытым исходным кодом, предпочтительно в Delphi (XE2) или, если нет, в C #, специальные протоколы для моей системы, полностью посвященные моему проекту, и в окончательной форме DLL, которые можно использовать как на Веб-сайте ( в C #) и приложения (в Delphi).
- Веб-сервис - однако у меня есть только 1 место для хостинга (Оплата за 1 сайт, 2-й сайт будет двойной платой за меня). Я не могу разместить какие-либо дополнительные веб-службы или службы Windows; это должно быть интегрировано с веб-сайтом. В противном случае я бы сделал для этого веб-сервис.
Я бы предпочел второй вариант, и я не хочу приближаться к первому, а третий вообще не могу.
Так есть ли хорошие библиотеки для слоев базы данных? А может быть некоторые уже установлены в Delphi XE2? Я думаю, может быть, зашифрованный пакет XML?
В качестве примера, скажем, у меня есть таблица для «Клиентов». Как на моем веб-сайте, так и в приложениях у меня никогда не должно быть SQL-скриптов, таких как select * from Customers
, или вообще никаких SQL-скриптов. Вместо этого у меня будет обертка вокруг базы данных. Поэтому я могу вызвать такую функцию, как DBGetCustomers(Conditions: TGetCustomersConditions): TDBCustomers;
, где TGetCustomersConditions
- это какой-то способ фильтрации запроса, а TDBCustomers
представляет результаты запроса.
Также может существовать функция DBAddCustomer(Item: TCustomerToAdd): TInsertSuccess;
, где TCustomerToAdd
представляет то, что нужно вставить, а TInsertSuccess
представляет любой результат, такой как сообщение об ошибке или затронутые строки. Я не намерен, чтобы он работал точно , как это, но просто для объяснения концепции любой обертки в целом. Когда приложение отправляет запрос на сервер, оно все еще не преобразовало что-либо в запрос SQL. Когда запрос поступает на сервер (который может подключиться к базе данных), только сервер самостоятельно декодирует все в запрос SQL.