Короткий ответ
Принцип наименьших привилегий требует выдавать приложению только права, необходимые для его работы (SELECT/INSERT/UPDATE/DELETE на нужных таблицах), чтобы при компрометации приложения ущерб был ограничен, а не распространялся на всю базу данных, включая возможность удалять таблицы или читать чужие схемы.
Как это работает подробнее
В большинстве СУБД можно создать отдельного пользователя/роль с ограниченным набором грантов на конкретные таблицы и операции, отдельно от учётной записи администратора, используемой для миграций и обслуживания.
Пример кода
query.sql
-- учётная запись для приложения: только нужные операции на нужных таблицах
GRANT SELECT, INSERT, UPDATE, DELETE ON orders, order_items TO app_user;
-- отдельная учётная запись для миграций, не используемая самим приложением
GRANT ALL PRIVILEGES ON SCHEMA public TO migration_user;Что использовать на практике
- Практика. Для обычного рабочего процесса приложения достаточно CRUD-прав на свои таблицы; права на DDL (создание/удаление таблиц) и системные таблицы обычно нужны только отдельной учётной записи для миграций, запускаемой отдельно от основного приложения.
Подводные камни
- Риск. Используют одного и того же пользователя БД для приложения и для миграций «для простоты»; выдают права на все таблицы схемы, хотя сервис работает только с частью из них, расширяя потенциальную зону поражения при SQL-инъекции или утечке учётных данных.