2016-04-26 6 views
1

Как люди использовали подход при запуске отчетов или даже просто выбор нескольких записей из БД?С ABAC/XACML как защитить ресурсы в отчетах/больших наборах результатов?

Например, если у вас есть политика, которая гласит:

Врачи могут просматривать только пациент в их больнице

Очевидно, что эффективный способ реализовать это включить фильтр в запросе (where hospital = XXX), но это, похоже, ломается с директором ABAC, поскольку оно испекает правило в самом SQL.

Я знаю, что Axiomatics предлагает механизм обратного запроса, который, по-видимому, генерирует фильтры для вас на основе правил, - но в моей системе много сложного sql-кода, который нужно будет реорганизовать совсем немного, чтобы работать с этим.

Как другие люди справляются с этой проблемой?

ответ

1

Есть по существу три пути решения этой:

  1. Через обратный механизм запроса, как вы ссылались на. На данный момент это поддерживается только аксиоматикой. Идея обратного запроса состоит в том, что вместо указания полномасштабного вопроса, например, "Can Alice view document #123?", вы можете указать открытый вопрос, например. "Which documents can Alice view?".
  2. Через профиль множественного решения XACML 3.0, который позволяет задавать несколько вопросов за один раз, например. «Может ли Алиса рассмотреть Док №1, №2, №3?». MDP практичен для сотен предметов в лучшем случае. Вы можете комбинировать его с стратегией разбивки на страницы. Вы можете узнать больше о MDP here.
  3. Посредством использования обязательств. Вы можете написать политику, в которой говорится, что в целом врач имеет право просмотреть медицинские записи + обязательство выполнить инструкцию SQL фильтра. Проблема с этим подходом заключается в том, что он ставит семантику авторизации внутри обязательства, а не внутри политики. Кроме того, что, если срабатывают множественные обязательства?
+0

Спасибо, Дэвид. Я читал много ваших комментариев/сообщений за прошлую неделю и надеялся, что вы это увидите. – jbd

+0

Я чувствую, что это неотъемлемая проблема с авторизацией в целом. Я рассматриваю подход, где точка перехвата происходит до фактического выполнения запроса. Например, определите, может ли Алиса просматривать документы в больнице X. Если это так, разрешите выполнение запроса. По сути, сам запрос становится ресурсом, который объект хочет запустить. Любая обратная связь по этому подходу? Я уверен, что другие сделали это. – jbd

+0

Я добавил новый подход к ответу. Вы правы, что есть два уровня контроля доступа: функциональный (вы имеете право на получение медицинской документации в целом) и уровень данных один (вы можете просматривать только записи в своем отделе) –

 Смежные вопросы

  • Нет связанных вопросов^_^