Пятый фактор
Обсудить задачу
Безопасность и эксплуатация

Изоляция данных клиентов через PostgreSQL RLS

Строим карту таблиц, связей, ролей приложения, фоновых заданий и путей, по которым определяется текущая организация. Выбираем способ передачи контекста клиента в соединение PostgreSQL и защищаем его установку для каждого запроса.

Срок: 8 рабочих дней

Когда стоит обратиться

Обычно к нам обращаются в таких ситуациях:

  • Проект хранит данные нескольких организаций в одной базе и полагается на фильтр tenant_id в каждом запросе приложения.
  • Для каждой новой функции или выгрузки команда снова вручную проверяет межклиентский доступ.
  • Перед подключением крупного заказчика требуется дополнительный уровень изоляции внутри PostgreSQL.

Что именно мы сделаем

01

Строим карту таблиц, связей, ролей приложения, фоновых заданий и путей, по которым определяется текущая организация.

02

Выбираем способ передачи контекста клиента в соединение PostgreSQL и защищаем его установку для каждого запроса.

03

Создаём политики RLS для SELECT, INSERT, UPDATE и DELETE, отдельно описываем действия администратора и служебных процессов.

04

Проверяем ORM, отчёты, миграции, очереди и пакетные операции, добавляем нужные индексы и понятные ошибки доступа.

05

Проводим автоматические тесты для двух изолированных организаций и готовим инструкцию по добавлению новых таблиц.

Что входит в стоимость

34 900 ₽ за всю работу

Строим карту таблиц, связей, ролей приложения, фоновых заданий и путей, по которым определяется текущая организация. Выбираем способ передачи контекста клиента в соединение PostgreSQL и защищаем его установку для каждого запроса. Создаём политики RLS для SELECT, INSERT, UPDATE и DELETE, отдельно описываем действия администратора и служебных процессов.

Перед сдачей проверяем, что пользователь одной организации получает только свои строки во всех контрольных запросах. В комплект результата входят: политики PostgreSQL RLS для согласованных критичных данных; набор тестов чтения и изменения строк между организациями; схема ролей, контекста клиента и правил для новых таблиц. Небольшие связанные уточнения, которые появляются во время работы, уже учитываем в стоимости.

Что будет готово

Материалы

Передадим вам

  • Политики PostgreSQL RLS для согласованных критичных данных.
  • Набор тестов чтения и изменения строк между организациями.
  • Схема ролей, контекста клиента и правил для новых таблиц.
Проверка

Перед сдачей проверим

  • Пользователь одной организации получает только свои строки во всех контрольных запросах.
  • Попытка изменить запись другой организации завершается контролируемым запретом на уровне PostgreSQL.
  • Административная и фоновая роль выполняет согласованные операции с записью действий в журнале.

Как это выглядит на практике

Проверка доступа к чужому заказу

Типичная ситуация: проект хранит данные нескольких организаций в одной базе и полагается на фильтр tenant_id в каждом запросе приложения. Сначала создаём по тестовому заказу для двух организаций, затем открываем сессию приложения в контексте первой организации, а в финале запрашиваем заказ второй организации по прямому идентификатору.

  1. 01

    Создаём по тестовому заказу для двух организаций.

  2. 02

    Открываем сессию приложения в контексте первой организации.

  3. 03

    Запрашиваем заказ второй организации по прямому идентификатору.

  4. 04

    PostgreSQL скрывает строку или запрещает изменение, а тест фиксирует ожидаемый результат.

Что понадобится для работы

От вас

  • Временный доступ к схеме PostgreSQL, миграциям и тестовой базе.
  • Описание ролей приложения, организаций и служебных процессов.
  • Ключевые сценарии кабинета, API, отчётов и фоновых задач.

Если у вас немного другая ситуация

Небольшие уточнения, которые помогают довести согласованный результат до рабочего состояния, уже учитываем в цене. Если по ходу работы появится отдельный крупный блок или понадобится платная лицензия, сначала обсудим варианты и стоимость. Расскажите о своей ситуации — подстроим план под неё.

Стоимость работ 34 900 ₽ полная стоимость известна заранее
  1. 3 000 ₽после подписания договора через Диадок
  2. 31 900 ₽после выполнения, демонстрации и приёмки результата

Предоплата входит в общую стоимость. Оставшуюся сумму оплачиваете после демонстрации и приёмки готовой работы.

Часто спрашивают

Об этой услуге

Зачем RLS, если приложение уже добавляет tenant_id?

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

Как администратор увидит данные всех организаций?

Для административных сценариев создадим отдельную роль и явные правила. Такой доступ будет проще контролировать, тестировать и фиксируем в журнале.

RLS замедляет PostgreSQL?

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

Получится внедрить RLS в работающий сервис?

Да. Сначала включим политики на тестовой базе и одной группе таблиц, проверим приложение и фоновые задачи, затем переносим готовую схему в рабочую среду.

Цена и изменения по ходу работы

Цена на странице окончательная?

Да. Перед началом мы сверяем исходные данные и фиксируем результат в договоре. Указанная на странице сумма покрывает согласованную работу целиком, даже если её техническая реализация потребует больше времени, чем ожидалось при оценке.

Что означает резерв незапланированных работ?

Это уже включённый в цену запас времени на небольшие связанные уточнения заказчика, которые появляются после старта: например, добавить поле, изменить формат уведомления или учесть ещё одно условие обработки.

Резерв рассчитывается по формуле: стоимость услуги × 30% ÷ 1 500 ₽. Для услуги за 30 000 ₽ это 6 часов. Эти часы относятся только к дополнительным, заранее незапланированным уточнениям. Они не являются сроком проекта и не ограничивают время на основную работу: согласованный результат мы выполняем полностью.

Можно уточнять детали уже во время работы?

Да. Небольшие связанные изменения обычно помещаются во включённый резерв и не требуют доплаты. Если новая идея заметно меняет результат или превращается в самостоятельную задачу, сначала обсудим подход и стоимость. Любое решение согласуем до выполнения.

Начало работы и оплата

Как оформляются договор и оплата?

Подписываем договор через Диадок. Предоплата составляет 3 000 ₽ и входит в общую стоимость услуги. Остаток оплачивается после демонстрации и приёмки готового результата.

Когда начинается срок выполнения?

Срок отсчитывается после согласования задачи, получения необходимых доступов и материалов, подписания договора и поступления предоплаты. Конкретную дату старта и плановый день готовности подтверждаем перед началом.

Как учитываются платные лицензии и внешние сервисы?

До старта проверяем, нужны ли тарифы, лицензии, сертификаты или дополнительные ресурсы внешних систем. Если они потребуются, заранее покажем варианты и стоимость. По возможности аккаунты и лицензии оформляются сразу на заказчика.

Проверка результата и гарантия

Как принимается готовая работа?

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

Какая гарантия действует после сдачи?

На выполненные изменения действует гарантия 3 месяца. Если в изменённой нами части обнаружится ошибка нашей реализации, проверим и исправим её без дополнительной оплаты. Переданные материалы, настройки и код остаются у заказчика.

Следующий шаг

Опишите задачу

Расскажите, что происходит сейчас и какой результат хотите получить. Можно указать сайт, CMS, 1С, CRM, ERP или другую систему. Если подходящую услугу выбирать рано, просто опишите ситуацию — мы разберёмся и предложим следующий шаг.