Как можно защитить структуру таблиц PostgreSQL от разработчиков в приложении на Nest.js?

Всем привет! У меня возникла ситуация: мне необходимо предоставить разработчику доступ к проекту на nest.js. 

Вопрос: как я могу скрыть структуру таблиц и саму базу данных, чтобы разработчик смог продолжить разработку на своем локальном ПК? База данных находится на удаленном сервере. В настоящий момент у меня есть файл user.entity.ts, который содержит структуру таблицы user в базе данных, поэтому разработчик может легко создать подобную базу данных и обойти меня.
  • 5 декабря 2024 г. 16:23
Ответы на вопрос 2
Защитить структуру таблиц PostgreSQL от разработчика в приложении на Nest.js можно несколькими способами. Вот несколько рекомендаций:

1. **Изолировать базу данных**:
   - Разработчику следует предоставить доступ только к специфической базе данных (или таблицам), необходимым для его работы. Это можно сделать, создавая отдельную базу данных с ограниченным набором данных и правами доступа.

2. **Использование ORM**:
   - Создайте интерфейсы репозиториев и сервисов, которые будут использоваться разработчиком. Это позволит вам контролировать доступ к данным и бизнес-логике, не раскрывая структуру таблиц напрямую.

3. **Скрытие модели данных**:
   - Вместо того чтобы передавать entity файлы с определением структуры таблиц, предоставьте разработчику скомпилированные версии вашего приложения. Он сможет работать с API, не зная подробной информации о структуре таблиц.
   - Используйте DTO (Data Transfer Objects), чтобы скрыть внутреннюю структуру данных.

4. **API ограничение**:
   - Создайте API, который предоставляет только необходимые данные, и убедитесь, что он защищен аутентификацией и авторизацией. Разработчик сможет использовать API, но не получит доступ напрямую к базе данных.

5. **Логирование и аудит**:
   - Включите механизмы логирования и аудита для отслеживания действий разработчиков с базой данных. Это поможет вам увидеть, если они пытаются получить доступ к информации, которую вы хотите скрыть.

6. **Разграничение прав**:
   - Настройте права доступа на уровне PostgreSQL таким образом, чтобы у разработчика не было возможности выполнять команды, которые могут угрожать безопасности базы данных (например, `CREATE`, `DROP`, `ALTER`).

7. **Использование тестовой базы**:
   - Создайте тестовую базу данных с извлеченными или измененными данными, которые нельзя использовать для получения информации о реальных пользователях или бизнес-процессах.

8. **Документация и обучение**:
   - Обучите разработчиков работать с вашим кодом и API, минимизируя необходимость углубленного знания о структуре базы данных.

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

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

Самое 'простое' направление - перенести в эту прослойку абсолютно всю логику приложения, оставив 'снаружи' только отображение. Грубо говоря вместо таблиц users,documents,rights дать объекты-страниц/форм - авторизация пользователя, чтение, создание и редактирование документов. Помню для веб очень удачно с этим справлялись xml/xslt (между сервером и приложением гуляет xml, а в xslt описывается интерфейс, т.е. View в идеологии MVC), поддержка которых встроена в браузер до сих пор...

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

p.s. так ли важны и ценны эти структуры данных? стоит ли их сохранение затраченных усилий?
Похожие вопросы