Права доступу до аналітичних даних
1. Загальний опис
Одним з елементів механізму розмежування прав доступу до даних аналітичної БД є визначення переліку представлень (views), доступних для кожної зі створених аналітичних ролей в бази даних.
Цей перелік визначається моделювальником даних через додатковий XML-шаблон для Liquibase (див. секцію XML-шаблони цього документа).
2. Передумови
Для видачі або відкликання прав запита даних із представлень для певної ролі, мають виконуватися наступні умови:
-
Команда має виконуватись лише на аналітичній БД (
context="sub"
). -
Роль, для якої надається доступ, має існувати на рівні аналітичної бази даних.
-
Представлення, доступ до якого надається, має існувати на рівні аналітичної бази даних.
Порушення цих передумов генеруватиме помилку.
3. XML-шаблони
Наступна конструкція надаватиме право запита даних із представлень registry_data_v
та registry_info_v
для ролі analytics_officer_level_1
, а також заборонятиме доступ до цих самих представлень для ролі analytics_officer_level_2
.
<changeSet author="registry owner" id="grant/revoke analytics rights" context="sub">
<ext:grant>
<ext:role name="analytics_officer_level_1">
<ext:view name="registry_data"/>
<ext:view name="registry_info"/>
</ext:role>
</ext:grant>
<ext:revoke>
<ext:role name="analytics_officer_level_2">
<ext:view name="registry_data"/>
<ext:view name="registry_info"/>
</ext:role>
</ext:revoke>
</changeSet>
Результатом виконання зазначеного шаблону Liquibase є згенерований нижче SQL-синтаксис, що містить DCL-оператори для визначення доступу до даних.
GRANT SELECT ON registry_data_v TO analytics_officer_level_1;
GRANT SELECT ON registry_info_v TO analytics_officer_level_1;
REVOKE SELECT ON registry_data_v FROM analytics_officer_level_2;
REVOKE SELECT ON registry_info_v FROM analytics_officer_level_2;
За детальною інформацією щодо створення моделі даних за допомогою шаблонів Liquibase зверніться до сторінки Створення сценаріїв побудови фізичної моделі даних реєстру за допомогою функціональних розширень Liquibase. |
3.1. Теги доступу до всіх представлень
Якщо певна роль потребує доступу до всіх наявних аналітичних представлень, то за допомогою тегів grantAll
та revokeAll
є можливість надати та анулювати права на запит всіх даних, присутніх у представленнях репліки БД.
Важливо! Ці теги вимагають застосування атрибута runAlways зі значенням "true" (runAlways="true" ) на рівні changeset Liquibase. Якщо задати значення false , то тег не спрацює, і, в результаті, повернеться помилка. Якщо не встановити жодного значення для атрибута, то буде використане значення за замовчуванням, що також призведе до помилки.
|
<changeSet author="registry owner" id="grant all" context="sub" runAlways="true">
<ext:grantAll>
<ext:role name="analytics_officer_level_1"/>
</ext:grantAll>
<ext:revokeAll>
<ext:role name="analytics_officer_level_2"/>
</ext:revokeAll>
</changeSet>
Така конструкція має виконати DCL-оператори надання прав запита даних по кожному з представлень, що існують в аналітичній БД, для ролі analytics_officer_level_1
і анулювання таких прав для ролі analytics_officer_level_2
.
3.2. Налаштування розмежування доступу до звітів Redash
Для розмежування доступу до звітів Redash між ролями користувачів потрібно, щоб звіти та запити, мали унікальні назви (name
).
Якщо надати доступ декільком ролям до звітів з однаковими назвами звіту або запиту, то в результаті одна з ролей переміститься до архіву і більше не буде показуватися в redash-viewer, а для іншої ролі звіт буде відображено.
Так відбувається саме через механізм оновлення звітів:
-
Перед публікацією звіту знаходиться його попередня версія у базі за його назвою і архівується.
-
Далі публікується оновлений звіт.
Пошук старого звіту проходить незалежно від ролі, для якої повинен бути опублікований новий звіт.
|
Приклад структури каталогу звітів reports
з розмежуванням доступів до звітів за ролями представлено нижче.
|
Додаткову інформацію щодо доступу до даних та розмежування прав ви можете переглянути за посиланням: