Перейти к содержанию

Разделение прав доступа к данным на уровне строк

Примечание

Функционал в аналогичных программных продуктах известен как «Row-level security», RLS, или «безопасность на уровне строк».

Назначение функционала и возможности

Glarus BI предоставляет возможность настройки динамического построчного доступа к данным на основе атрибутов и их значений. Представьте, что вы импортировали в ClickHouse данные из объёмного excel-файла и вам нужно разграничить доступ к строкам этой таблицы без ручной разбивки её на отдельные таблицы.

Например, загрузкой данных занимается головной офис в Москве, филиалы распределены по регионам, и в таблице есть столбец, в котором для каждой записи указан регион. Вы хотите предоставить доступ каждому филиалу только к его части таблицы, то есть к отдельным строкам, отфильтрованным по региону. Пусть это будет столбец «Филиал» со значениями «Орёл», «Пенза», «Рязань» и т.д. В данном примере «Филиал» будет ключом атрибута, а «Орёл», «Пенза», «Рязань» — значениями атрибута, на основе которых будет выполняться разграничение доступа. Ключ атрибута может отличаться от названия столбца, вы сможете сопоставить их в настройках детального доступа к таблице, если разные названия оправданы и не запутают вас.

Система позволяет гибко настроить доступ к набору строк не только для группы пользователей, но и индивидуально для каждого конкретного пользователя в системе. Причём настройки пользователя могут отличаться от настроек его группы, если это требуется. Вы можете использовать несколько столбцов для разделения прав. В одно поле «Значение» можно записать несколько фактических значений. Пользователь может входить в несколько групп, наследуя их атрибуты.

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

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

Предварительные условия

До настройки разделения прав вам потребуется выполнить предварительную подготовку:

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

Остальные настройки выполняются администратором системы в разделе «Управление».

Примечание 1

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

Примечание 2

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

Настройка в общем виде

Допустим, все предварительные условия выполнены.

Далее потребуется:

Шаг 1 Шаг 2 Шаг 3
Добавить один или несколько атрибутов в настройки учётной записи и/или группы. Настроить детальный доступ к таблице для группы. Создать коллекцию (с необходимыми элементами) и выдать группам пользователей доступ на чтение.
Управление > Люди (Группы) Управление > Полномочия > Данные (выбрать группу, базу данных, схему, таблицу, «Детальный» тип доступа) Главное меню. Настройка доступа также в Управление > Полномочия > Коллекции (выбрать коллекцию, найти группу в списке)
Атрибут в настройках группы Детальный доступ к таблице Доступ к коллекции

Пример настройки также показан в нашем ролике "Работа с доступами в Glarus BI" на Rutube.

Настройка атрибутов для группы пользователей

В простейшем случае, когда всем пользователям одного филиала в примере нужно предоставить одни и те же строки, достаточно:

  1. Включить их в одну группу — по названию филиала.
  2. Выдать разрешение группе на коллекцию (из предварительных условий).
  3. Записать ключ атрибута и его значение в настройки группы пользователей.
  4. Сопоставить ключи атрибутов названиям столбцов в настройках таблицы для данной группы.

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

Здесь мы рассмотрим пункт 3 — запись атрибута и его значения в настройки группы пользователей. Пункт 4 рассмотрен в отдельном подразделе.

Выше мы определились, что для разделения доступа используем атрибут «Филиал» (так же называется столбец в таблице). Предположим, пользователи из Рязани входят в группу «Рязанский филиал» (название группы в Glarus BI). Значение атрибута, по которому фильтруем строки: «Рязань» (значения — в столбце «Филиал» таблицы). Приступаем к настройке:

  1. Управление > Люди > Группы > (находим группу «Рязанский филиал») > … > Редактировать группу.
  2. Нажимаем + Добавить атрибут. — Появляются поля ввода ключа и значения атрибута. Вы можете добавить столько атрибутов, сколько вам нужно.
  3. В поле «Ключ» вводим название атрибута. В примере — Филиал, без кавычек.
  4. В поле «Значение» вводим название филиала. В нашем примере 'Рязань'. Вы можете перечислить несколько значений одного атрибута через запятую, каждое взять в одинарные кавычки, например: 'Рязань', 'Орёл'.
  5. Кнопка «Обновить» сразу применяет новые настройки.

Примечание 1

Обратите внимание: строковое значение нужно взять в одинарные кавычки, например, 'строка'. Это обязательное требование. Если его проигнорировать, у пользователей возникнут проблемы с доступом к данным. Двойные кавычки недопустимы. Числовые значения брать в кавычки не нужно.

Примечание 2

На этом этапе и до момента включения детального доступа к таблице для группы пользователи группы при входе в систему видят таблицу целиком (через коллекцию), без фильтрации по строкам.

Следующий шаг: настройка детального доступа к таблице.

Настройка атрибутов для учётных записей

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

  • пользователь должен иметь индивидуальные настройки, не такие как у группы, но при этом состоять в этой группе;
  • это тестовый пользователь, на примере которого вы хотите познакомиться с функционалом, чтобы потом настроить группу;
  • у вас всего один пользователь для работы с данным подмножеством строк.

Предположим, в рязанском филиале есть сотрудник, которому нужен доступ не только к рязанским данным, но и к данным Орла и Пензы. Настроим ему индивидуальный доступ.

  1. Управление > Люди > (находим сотрудника) > … > Редактировать пользователя.
  2. Нажимаем + Добавить атрибут. — Появляются поля ввода ключа и значения атрибута. Мы можем добавить столько атрибутов, сколько нужно. Но в нашем примере нам хватит одного, с тремя значениями.
  3. В поле «Ключ» вводим название атрибута. В примере Филиал, без кавычек.
  4. В поле «Значение» вводим три значения через запятую: 'Рязань', 'Орёл', 'Пенза'.
  5. Кнопка «Обновить» сразу применяет новые настройки.

Примечание 1

Обратите внимание: строковое значение нужно взять в одинарные кавычки, например, 'строка'. Это обязательное требование. Если его проигнорировать, у пользователей возникнут проблемы с доступом к данным. Двойные кавычки недопустимы. Числовые значения брать в кавычки не нужно.

Примечание 2

На этом этапе и до момента включения детального доступа к таблице для группы пользователи группы при входе в систему видят таблицу целиком (через коллекцию), без фильтрации по строкам.

Сочетание атрибутов группы и учётных записей

При настройке атрибутов учётных записей нужно учесть несколько особенностей, от которых будет зависеть результат.

  1. Атрибуты пользователя внутри системы имеют более высокий приоритет, чем атрибуты группы, что и позволяет реализовать нестандартные настройки, отличные от группы.
  2. В настройки группы можно не добавлять ни один атрибут. — Система будет использовать атрибуты пользователя.
  3. Значение атрибута группы не наследуется пользователем с таким же атрибутом. Если в настройках пользователя и группы присутствует атрибут с одним и тем же ключом, система использует атрибут пользователя и игнорирует значение атрибута группы.
  4. Если атрибутов несколько, и ключи в настройках группы и пользователя различны, то пользователь наследует те атрибуты группы, которых нет в его настройках.
  5. Если допущена ошибка в настройках, может сложиться ситуация, когда часть пользователей получает доступ к данным через атрибуты группы (при этом в их настройках нет ни одного атрибута), а другая часть остаётся без доступа к данным той же группы (в настройках их учётных записей указано ошибочное значение атрибута).

Чтобы легче понять неоднозначную на первый взгляд логику сочетания атрибутов пользователя и группы, вы можете представить, как система «накладывает» атрибуты пользователя на атрибуты группы, используя только ключ атрибута. Ниже показан пример:

Атрибуты пользователя Атрибуты группы Результат сочетания атрибутов для пользователя
не настроены Филиал 'Орёл' Филиал 'Орёл'
Филиал 'Пенза' не настроены Филиал 'Пенза'
Филиал 'Пенза' Филиал 'Орёл' Филиал 'Пенза'
Филиал 'Пенза' Филиал 'Орёл','Рязань' Филиал 'Пенза'
Филиал 'Пенза' Филиал 'Орёл', Показатель 'Чистая прибыль' Филиал 'Пенза', Показатель 'Чистая прибыль'
Филиал 'Пенза', 'Рязань' Филиал 'Орёл' Филиал 'Пенза', 'Рязань'
Филиал 'Пенза', 'Рязань', Показатель 'Выручка' Филиал 'Орёл', Показатель 'Чистая прибыль' Филиал 'Пенза', 'Рязань', Показатель 'Выручка'

Настройка детального доступа к таблице

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

  1. Управление > Полномочия > Данные.
  2. Далее можно искать по группе или по базе данных — это два разных способа навигации к одной цели. Нужно найти базу данных, группу, схему и таблицу, к которой настраивается доступ.
  3. В настройках таблицы, в столбце Доступ к данным выбрать Детальный. — Система откроет модальное окно детальной настройки доступа к таблице.
  4. Далее всё очевидно. Представлены два списка: столбцов и атрибутов. Слева нужно выбрать столбец (в нашем примере «Филиал»), справаключ атрибута (в нашем примере также «Филиал»). Если ожидаемого значения нет в списке, вероятно, на каком-то шаге была допущена ошибка, например, при поиске таблицы открыта другая группа, или атрибут не был задан в настройках учётной записи или группы.
  5. Кнопка «Сохранить» немедленно применяет настройку.

Примечание 1

Обратите внимание: в настройках таблицы указывается ключ атрибута и название столбца. Не ожидайте здесь поля ввода для значения атрибута. Значение задаётся в настройках учётной записи и группы.

Примечание 2

Если вы после сохранения настроек видите ещё одно предложение сохранить настройки под меню, можете также нажать «Сохранить» и согласиться с применением настроек. Это связано с переключением типа доступа к данным. «Отмена» не сработает, если вы применили детальные настройки в модальном окне.

Примечание 3

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

Примечание 4

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

Осталось создать коллекцию и настроить к ней доступ.

Создание коллекции, настройка доступа к ней

Создание элементов коллекции описано в соответствующих разделах документации, вы можете воспользоваться ссылками в списке ниже для перехода.

Вам потребуется: 1. Настроить одну или несколько коллекций с необходимыми запросами, моделями, дашбордами и визуализациями (нет необходимости создавать отдельную коллекцию для каждой группы, будет достаточно одной). 2. Разрешить группам пользователей чтение созданной коллекции (в настройках коллекции или в Управление > Полномочия > Коллекции, тип доступа «Просмотр»).

После выполнения этого шага можно проверять доступ со стороны пользователей. Настройка завершена!

Примечание

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

Отмена детального доступа к таблице

Здесь возможны несколько вариантов:

  • вы хотите показать все данные всем пользователям группы;
  • нужно полностью закрыть доступ к таблице для группы;
  • нужно отменить доступ одному активному пользователю группы.

Отмена детального доступа — предоставление полного доступа всем пользователям группы

  1. Управление > Полномочия > Данные.
  2. Найдите группу, базу данных, схему, таблицу.
  3. В столбце «Доступ к данным» смените Детальный на Неограниченный или Не обслуживается.
  4. Если у вас несколько таких групп, повторите то же для каждой.
  5. Под меню нажмите кнопку «Сохранить», просмотрите изменения и подтвердите их.
  6. Если атрибуты больше не будут использоваться, удалите их из настроек учётных записей и групп, чтобы избежать вероятных ошибок доступа к данным в будущем.

Примечание

В этом сценарии предложение сохранить настройки под меню помогает вам выполнить несколько изменений за один сеанс.

Отмена детального доступа — прекращение доступа группы к данным

  1. Управление > Полномочия > Данные.
  2. Найдите группу, базу данных, схему, таблицу.
  3. В столбце «Доступ к данным» смените Детальный на Не обслуживается.
  4. Если у вас несколько таких групп, повторите то же для каждой.
  5. Под меню нажмите кнопку «Сохранить», просмотрите изменения и подтвердите их.
  6. Удалите разрешение на коллекцию для группы. Это можно сделать в разделе Привилегии > Коллекции.
  7. Если атрибуты больше не будут использоваться, удалите их из настроек учётных записей и групп, чтобы избежать вероятных ошибок доступа к данным в будущем.

Примечание 1

В этом сценарии предложение сохранить настройки под меню помогает вам выполнить несколько изменений за один сеанс.

Примечание 2

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

Отмена детального доступа — прекращение доступа к данным группы одному активному пользователю

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

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

Если исключение из группы недопустимо, можно в настройках учётной записи задать такое значение атрибута, которого нет в таблице (не меняя ключа!). Но если в настройках группы несколько ключей, пользователь наследует те атрибуты, ключи которых отличаются от атрибутов в его настройках и получит доступ к части данных. — Пользователь продолжает видеть коллекцию, но при доступе к её элементам будет получать сообщение об отсутствии доступа. Способ быстрый, но недостаточно надёжный: доступ может появиться в случае изменения настроек группы. Далее в этом случае придётся или дублировать ключи атрибутов группы в его настройках и вводить несуществующие значения для каждого, или рассматривать вопрос об исключении пользователя из группы.

Сочетание противоречивых настроек в системе

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

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

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

Ситуация Доступ к данным таблицы: группа 1 Доступ к данным таблицы: группа 2 Атрибут: учётная запись Атрибут: группа 1 Атрибут: группа 2 Результат
1 Неограниченный Не обслуживается Не задан Не задан Не задан Данные таблицы доступны пользователю без ограничений.
2 Неограниченный Детальный: Атрибут1 ~ Столбец1 Не задан Не задан Атрибут1 задан, условие выполняется Ограниченный атрибутом доступ к данным таблицы.
3 Неограниченный Детальный: Атрибут1 ~ Столбец1 Не задан Не задан Атрибут1 задан, условие не выполняется Доступ запрещён. Ошибки при попытке доступа к данным вида «нет прав на доступ к данным».
4 Не обслуживается Детальный: Атрибут1 ~ Столбец1 Не задан Не задан Атрибут1 задан, условие выполняется Ограниченный атрибутом доступ к данным таблицы.
5 Не обслуживается Детальный: Атрибут1 ~ Столбец1 Не задан Не задан Атрибут1 задан, условие не выполняется Доступ запрещён. Ошибки при попытке доступа к данным вида «нет прав на доступ к данным».
6 Детальный: Атрибут1 ~ Столбец1 Детальный: Атрибут1 ~ Столбец1 Не задан Атрибут1 задан, условие выполняется Атрибут1 задан, условие не выполняется Ограниченный атрибутом доступ к данным таблицы.
7 Детальный: Атрибут1 ~ Столбец1 Детальный: Атрибут1 ~ Столбец1 Атрибут1 задан, условие не выполняется Атрибут1 задан, условие выполняется Атрибут1 задан, условие выполняется Нет результатов.

В приведённой выше таблице «Доступ к данным таблицы: группа 1» означает, что администратор открыл раздел «Привилегии», выбрал группу 1, нашёл базу, схему, таблицу и выбрал один из вариантов доступа.

«Атрибут: учётная запись» означает, что администратор перешёл в раздел «Люди», открыл настройки учётной записи и выполнил (или не выполнил) какие-то настройки атрибутов.

«Атрибут: группа 1» означает, что администратор открыл раздел «Люди», перешёл в «Группы», открыл настройки группы 1 и выполнил (или не выполнил) какие-то настройки атрибутов.

«Результат» — это решение системы по выдаче или запрещению доступа.

Ситуация 1

Система предоставляет доступ, так как пользователь участвует в группе 1, которой разрешён полный доступ к таблице, и нет настроек детального (построчного) доступа, которые имеют приоритет над стандартной моделью безопасности. Настройки доступа группы 2 также не запрещают просмотра данных в коллекции.

Ситуация 2

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

Ситуация 3

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

Ситуация 4

Система частично ограничивает пользователю доступ к данным таблицы на основании разрешений группы 2, несмотря на разрешение доступа к данным коллекции в группе 1. Настройки детального доступа получают приоритет над стандартной моделью безопасности, и выполняется правило для детального доступа.

Ситуация 5

Система запрещает пользователю доступ к данным таблицы на основании разрешений группы 2 и невыполнения правила для детального доступа. Разрешение для группы 1 здесь не влияет на результат, так как настройки детального доступа имеют приоритет над стандартной моделью безопасности, и если в будущем в таблице появятся строки, соответствующие значению атрибута, они будут доступны пользователю.

Ситуация 6

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

Ситуация 7

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

Дополнительная информация