Мне нужны некоторые мнения.Использование Postgresql в качестве среднего слоя. Нужно мнение
Я собираюсь разработать программное обеспечение для POS и инвентаря для друга. Это проект небольшого масштаба для одного человека, поэтому я хочу сделать архитектуру максимально простой.
Я использую Winform для разработки графического интерфейса (веб-интерфейс не имеет смысла для программного обеспечения POS). Для базы данных я использую Postgresql.
Программа будет контролировать доступ на основе ролей пользователей, поэтому мне нужно разработать средний уровень, используя веб-сервер, для управления доступом пользователей, или я могу просто установить пользовательские привилегии непосредственно в Postgresql.
Разработка среднего уровня потребует много времени, и обслуживание будет более сложным. Поэтому я предпочитаю устанавливать контроль доступа непосредственно в базе данных.
Теперь выясняется, что использование базы данных для контроля доступа пользователей затруднительно. Я должен установить priveleges для каждой роли. Не говоря уже о том, что для некоторых таблиц привилегии находятся на уровне столбца. Это очень затрудняет рассуждение о безопасности.
Итак, теперь я должен установить все таблицы как недоступные, кроме суперпользователей. Программа будет подключаться к базе данных с использованием публичной роли. Поскольку таблицы недоступны публике, я собираюсь сделать общедоступные хранимые функции функцией SECURITY DEFINER (с ролью суперпользователя). Использование этих функций - единственный способ доступа к таблицам.
Я буду размещать роли пользователя и пароли в таблице. Поскольку сама таблица пользователя недоступна не суперпользователем, я сделаю функцию входа в систему, назовем ее fn_login(username, password)
. fn_login вернет ключ сеанса, если вход успешно завершен.
Для вызова других функций нам необходимо предоставить ключ сеанса для пользователя, например: fn_purchase_list(session_key)
, fn_purchase_new(session_key, purchase_id, ...)
.
Таким образом, я рассматриваю хранимые функции как API. Добавление нового пользователя будет проще, так как мне нужно только добавить новые строки в таблице пользователя, а не добавлять новые роли Postgresql. Мне не нужно будет устанавливать priveleges на уровне столбца. Все элементы управления будут выполняться программно.
Как вы думаете? Является ли этот подход выполнимым и масштабируемым? Есть ли лучший способ сделать это?
Спасибо!
Не каждое приложение необходимо масштабировать. 90-х клиент-серверная технология более чем жизнеспособна для многих организаций. Поскольку простой факт, что крупные организации фактически смогли получить с помощью технологии, свидетельствует о ее эффективности. Возможно, не оптимальный, но, по крайней мере, работоспособный. И, вероятно, это приложение не так близко к этим проблемам. Конечно, есть ограничения, это соображения дизайна, как и все остальное. –
Но задающий вопрос спросил: «Является ли этот подход выполнимым и масштабируемым?» Реализуемое? Конечно. Масштабируемость? Это зависит от того, как далеко нужно идти, и об этом не было никакого намека. – duffymo
Ну, я читал «проект небольшого масштаба для одного человека, поэтому я хочу сделать архитектуру максимально простой» и понял, что на этот вопрос уже был дан ответ. –