Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 10.11.2022
Сообщений: 98

Нужен ликбез по работе с базой данных и клиент-серверной архитектуре

10.08.2026, 15:31. Показов 3183. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовал программу с помощью компонентов доступа к базе FireDAC (FDQuery). База MySQL лежит на сервере.
Сервер был на FreeBSD и MySQL. Клиентов порядка 10 компьютеров. Никаких проблем не было.
Потом сервер отдали другому сисадмину, он зачем-то решил снести FreeBSD и поставить Линукс и MariaDB. Начались проблемки, но мы их решили.
Недавно новый админ обновил MariaDB до последней версии 11.4.2. После чего программа стала зависать у клиентов.
В логах отображается множество коннектов, которые накапливаются и не удаляются.
Code
1
2
3
4
2025-04-09 18:50:38 4 [Warning] Aborted connection 4 to db: 'med_db' user: 'ruser' host: '192.168.1.102' (Got an error reading communication packets)
2025-04-09 20:11:44 3 [Warning] Aborted connection 3 to db: 'med_db' user: 'ruser' host: '192.168.1.103' (Got timeout reading communication packets)
2025-04-10  3:23:30 6927 [Warning] Aborted connection 6927 to db: 'med_db' user: 'ruser' host: '192.168.1.101' (Got an error reading communication packets)
2025-04-10  3:38:59 6602 [Warning] Aborted connection 6602 to db: 'med_db' user: 'ruser' host: '192.168.1.33' (Lock wait timeout exceeded; try restarting transaction)
Админ объяснил это так: "У вас не клиент-серверная архитектура. Клиенты подключаются напрямую к базе, поэтому возникает множество дедлоков".
Может я чего-то не понимаю, но я так полагал, что когда клиенты подключаются к серверу БД - это и есть клиент-серверная архитектура (а не файл-серверная).
Т.е. он предлагает переписать программу на трехзвенную архитектуру? Клиент - сервер приложений - сервер БД?
Но все работало нормально, пока не обновили MariaDB. Никаких дедлоков и ничего не отваливалось. В дельфи всегда традиционно работали через FireDAC, и не грузили логику серверами приложений и джейсонами. Или я не прав?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2026, 15:31
Ответы с готовыми решениями:

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

Клиент-серверное приложение. Сервер - ПК, клиент - телефон (Android)
Здравствуйте, решил для обучения написать программу для выключения ПК с телефона, используя...

ADO+ACCESS Ликбез
Возможно, нарушаю правила, но ... Может быть имеет смысл завести на ресурсе некий баннер со...

36
Эксперт .NET
 Аватар для Usaga
14808 / 9581 / 1368
Регистрация: 21.01.2016
Сообщений: 36,089
31.08.2026, 12:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xxbesoxx Посмотреть сообщение
У него такой ?
Не совсем. Видимо такой:

Клиент -> СУБД (на сервере).

А админ предлагает такое:

Клиент -> Сервер Приложения -> СУБД

Правда для меня остаётся загадкой, как это должно помочь решить вопрос ТСа. Особенно в контексте того, что админ-диверсант продуктовое окружение может по желанию левой пятки изменить.
1
 Аватар для Beltar
1090 / 527 / 44
Регистрация: 05.05.2022
Сообщений: 3,766
01.09.2026, 08:39
Т. е. прямое обращение создаёт дедлоки, а прокладка, которая будет такие же запросы к БД слать, создавать их не будет?

И эту прокладку кто админить будет? Этот же самый админ? Ну так может намекнуть ему, что в случае реализации, на него ляжет дополнительная работа.

Я сам как-то трехзвенку никогда не делал, мне, если что, где сервер приложений развернуть, вопрос. Но я не помню, чтобы трехзвенка, вроде, тех же 1С хоть где-то работала просто сравнимо по скорости и удобству с прямым подключением. И если нет критических вопросов безопасности, то я не вижу никакого смысла с этим заморачиваться.
0
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 34
02.09.2026, 09:56
Можно я скажу через призму несколько иного восприятия?

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

С точки зрения администратора - это решение сильно упрощает работу и перекладывает ответственность на программиста, который его реализует. Потому что в случае несанкционированного доступа всегда можно сказать - кодер лажанулся, доступ должен быть ограничен, а вот, сервер приложения фигачит доступ всем. В случае же прямого подключения - вся безопасность ложится на плечи как раз админа.

Цитата Сообщение от Beltar Посмотреть сообщение
И эту прокладку кто админить будет?
А вот тут самая важная часть для сисадмина, который не умеет и не хочет работать - никто. Потому что за работу приложения есть кому отвечать. И отвечать всегда будет кодер.

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

Что важно, *nix системы, а точнее штатные файерволы на них - помимо систем защиты непосредственно БД - предоставляют гораздо более широкий спектр контроля в сравнении с win. Плюс идентификация от сервера БД - это будет вполне вменяемый уровень безопасности, но настраивать его придётся вашему админу.
0
 Аватар для Beltar
1090 / 527 / 44
Регистрация: 05.05.2022
Сообщений: 3,766
04.09.2026, 15:11
Цитата Сообщение от Hiori Посмотреть сообщение
а вот, сервер приложения фигачит доступ всем
С фига-ли? Сервер приложений, как минимум, скрывает структуру БД и реальные логины и пароли к ней. Ну и в целом ограничивает набор доступных операций с БД теми, которые в нем определены. Настраивать же реальные правила доступа надо в любом случае.

Цитата Сообщение от Hiori Посмотреть сообщение
который не умеет и не хочет работать - никто
Ну поэтому организации ставят 1С и штат сотрудников к нему, но делать что-то локально самому и потом за эту прокладку, которая где-то крутится, и не у программера, и не у юзеров отвечать, толку немного. В моем понимании, если есть компьютер, то отвечать за ВСЁ ПО на нем должен кто-то один. Корпоративный сервер - значит и отдел, сопровождения отвечает. Зато, если есть нормальная СУБД со своей системой прав, к которой есть администраторы, то можно создать для них документ, какие группы пользователей должны быть с какими правами, и потом любой админ, сможет не заморачиваясь с особенностями работы приложения просто отработать запрос вида "включить нового сотрудника в группы A, D и G"
0
Эксперт .NET
 Аватар для Usaga
14808 / 9581 / 1368
Регистрация: 21.01.2016
Сообщений: 36,089
06.09.2026, 06:36
Цитата Сообщение от Beltar Посмотреть сообщение
Зато, если есть нормальная СУБД со своей системой прав
Только на практике система прав бывает сильно сложнее того, что может СУБД предоставить.

Цитата Сообщение от Hiori Посмотреть сообщение
С точки зрения администратора - это решение сильно упрощает работу и перекладывает ответственность на программиста
Админу оно ничего не упрощает и ничего ни на кого не перекладывает.
0
5535 / 2888 / 573
Регистрация: 07.11.2019
Сообщений: 4,814
07.09.2026, 22:25
svnvlad, а это нормально что у вас один и тот-же пользователь ruser с разных ip заходит?...
0
1 / 1 / 0
Регистрация: 10.11.2022
Сообщений: 98
08.09.2026, 01:35  [ТС]
На локальную сеть один пользователь. Все подключаются через него. На внешний доступ другой пользователь. Права доступа на уровне бизнес логики. Там есть таблица user с пользователями, их паролями и правами. Это плохо? При создании нового рабочего места каждый раз лезть в базу на уровне админа базы и создавать пользователя?
0
Эксперт .NET
 Аватар для Usaga
14808 / 9581 / 1368
Регистрация: 21.01.2016
Сообщений: 36,089
08.09.2026, 02:33
Цитата Сообщение от svnvlad Посмотреть сообщение
Это плохо?
Нет, это правильно.
0
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 34
11.09.2026, 07:45
Цитата Сообщение от Usaga Посмотреть сообщение
Админу оно ничего не упрощает и ничего ни на кого не перекладывает.
Почему же? Я сужу со своей точки зрения именно администратора. Сказать "Я тут при чём? Разрабатывал кодер - с него и спрашивайте..." гораздо проще, чем пытаться отладить коробочное приложение, которое полностью в моей ответственности.

Цитата Сообщение от u235 Посмотреть сообщение
а это нормально что у вас один и тот-же пользователь ruser с разных ip заходит?...
Цитата Сообщение от svnvlad Посмотреть сообщение
Это плохо?
Да, это плохо. При трёхзвенной архитектуре - это правильно. При доступе с рабочего места к БД - нет.

Цитата Сообщение от svnvlad Посмотреть сообщение
При создании нового рабочего места каждый раз лезть в базу на уровне админа базы и создавать пользователя?
Но вы же создаёте нового пользователя в структуре домена. Почему не создать в БД?

Добавлено через 7 минут
Цитата Сообщение от Beltar Посмотреть сообщение
Сервер приложений, как минимум, скрывает структуру БД и реальные логины и пароли к ней
Я не это имела ввиду. Сервер приложений имеет свою идентификацию пользователя, но отрыт для доступа с любого IP (ну, чаще всего). На уровне БД же можно спокойно ограничить доступ определённого пользователя с конкретного IP. Я говорила только об этом.

Цитата Сообщение от Beltar Посмотреть сообщение
В моем понимании, если есть компьютер, то отвечать за ВСЁ ПО на нем должен кто-то один
Не получится. Точнее получится, но за ПО на рабочем месте и ПО на стороне сервера чаще всего отвечают разные люди, хотя это один софт. Даже больше того, я сама постоянно сталкиваюсь с тем, что работа софта - это ответственность моего бюро (администрирования), однако плагины, написанные для него - ответственность бюро программирования.
0
Эксперт .NET
 Аватар для Usaga
14808 / 9581 / 1368
Регистрация: 21.01.2016
Сообщений: 36,089
12.09.2026, 12:35
Цитата Сообщение от Hiori Посмотреть сообщение
Почему же?
Потому, что если что-то глючит, то это 90% что вопросы к разработчику, а не к админу. При условии, что админ не выступает диверсантом-вредителем, как в данной теме.
0
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 34
12.09.2026, 19:22
Цитата Сообщение от Usaga Посмотреть сообщение
Потому, что если что-то глючит, то это 90% что вопросы к разработчику, а не к админу
Только в том случае, если разработчик доступен.

Я не раз сталкивалась с ситуацией, когда на админа наседает начальство "к утру должно работать!", и мне такое говорили в том числе. А там софт купленный из левой шарашки, его даже софтом не назовёшь - поделка школьника, но зато в этой шарашке работает сын/внук/зять/племянник одного из директоров предприятия. И естественно - если не работает, то виноват админ
0
Эксперт .NET
 Аватар для Usaga
14808 / 9581 / 1368
Регистрация: 21.01.2016
Сообщений: 36,089
13.09.2026, 03:37
Hiori, и у админа есть объективная возможность на такой софт повлиять? И если есть такая возможность, то админ продолжает работать админом?
0
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 34
13.09.2026, 04:35
Нет, но продолжает, потому что деньги и соцпакет
0
 Аватар для volodin661
7158 / 2346 / 354
Регистрация: 10.12.2013
Сообщений: 8,135
20.09.2026, 19:32
Цитата Сообщение от Hiori Посмотреть сообщение
На уровне БД же можно спокойно ограничить доступ определённого пользователя с конкретного IP. Я говорила только об этом.

"На уровне БД"

Есть порадикальнее предложение - не ограничиваться IP-layer, а спуститься до физического:
по витой паре пускать, а если по по оптоволокну пытается подлец добраться до таблицы - сразу калёной метлой по наглой роже.
0
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 34
20.09.2026, 21:58
Цитата Сообщение от volodin661 Посмотреть сообщение
Есть порадикальнее предложение - не ограничиваться IP-layer, а спуститься до физического:
по витой паре пускать, а если по по оптоволокну пытается подлец добраться до таблицы - сразу калёной метлой по наглой роже.
А как же, пока не опустимся до коаксиального соединения - не верить никому.
Только к чему вообще сарказм, если MySQL при регистрации пользователя требует указать хост? Или вы указываете % и потом хоть трава не расти?
0
 Аватар для volodin661
7158 / 2346 / 354
Регистрация: 10.12.2013
Сообщений: 8,135
20.09.2026, 22:38
1) Потому что это не уровень БД.

2) про MySql сказать нечего, не пользуюсь, брезгливый.

3) Хочется порулить IP, сдай на права и welcome to коммутатор.
0
1 / 1 / 0
Регистрация: 10.11.2022
Сообщений: 98
20.09.2026, 23:08  [ТС]
Цитата Сообщение от Hiori Посмотреть сообщение
Но вы же создаёте нового пользователя в структуре домена. Почему не создать в БД?
Чево ето? У нас нет никакого домена, все компы в горизонтальной структуре.
В локальной сети в БД один пользователь, для внешнего доступа с сайта - другой, и фаервол ограничивает внешний доступ к 3306 только с одного IP.
Права доступа разграничиваются в бизнес-логике приложения. Там специальная форма с чекбоксами на read write delete к каждому функционалу для каждой группы пользователей. Кто-то может работать со списком клиентов, кто-то со списком лекарств, кто-то с назначениями врача, кто-то с кассой и т.д. Группы пользователей: директор, регистратор, старший регистратор, врач, старшая медсестра, бухгалтер и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2026, 23:08

Ликбез по DataSnap
Всех приветствую, предлагаю открыть дисскусию по теме технологии DataSnap (трехзвенка от...

клиент-серверные базы данных
Клиент-серверные базы данных говорят могут работать в сети . Под сетью понимается интернет? То...

Клиент-серверная база данных: где разместить серверную часть?
У меня есть две програмы, серверная и клиентская части БД в клиентской в настройки вбиваю...

Исходник подключения простого клиент-серверного приложения к базе данных?
Нужен простейший исходник. Есть 2 компьютера в локальной сети: на 1 (серверном, где установлен...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru