Абсолютно не важно, какое у вас отношение к Section Access в Qlik: все равно с ним сталкивается со временем каждый разработчик.

Технология работы с Section Access в QlikView уже была описана в одном из текстов на Data-Daily. Та же технология Section Access разграничения прав доступа к данным органично перешла в серверную версию Qlik Sense, но есть ли разница в работе с Section Access в Qlik Sense?  Сейчас опишу общий подход применения Section Access и его отличие в Qlik Sense.

Section Access: Краткое описание технологии

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

Qlik Sense Section Access

Например, таблица авторизации Section Access слева идет по полю Страна (COUNTRY).

НА ЗАМЕТКУ! Конечно, в живом приложении таблица авторизации невидна в модели данных.

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

В Section Access нужно определить минимум три поля: ACCESS, USERID и поле усечения, которое выстраивает связь с нужными данными.

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

Qlik Sense Section Access

Усечение данных в системах Qlik может быть организовано в разном формате:

  • строковый уровень доступа,
  • агрегированный уровень доступа,
  • колоночный уровень доступа,
  • объектный уровень доступа.

Рассмотри каждый из них:

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

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

Колоночный уровень доступа: Ограничиваем доступ не по строкам, а по столбцам. Например, мы составляем приложение по эффективности работы персонала и хотим, чтобы эта информация была доступна не для всех. Тогда скрываем всю колонку.

Объектный уровень доступа: Можно ограничить доступ к конкретным объектам приложения.

Приложение может использовать комбинацию этих четырех подходов.

Section Access использует строковый уровень доступа к данным, позволяя использовать один мастер-файл для решения различных по масштабу вопросов по обеспечению безопасности данных. Лучше стремиться именно к тому способу организации доступа к данным.

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

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

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

Это общие моменты по организации доступа к данным. А теперь переходим к Section Access в Qlik Sense.

Qlik Sense: Что изменилось в Section Access

В Qlik Sense есть две системы авторизации:

  • Контроль доступа: дает доступ пользователям к ресурсам Qlik Sense. Работает через службу репозитария Qlik Sense (QRS) и зависит от операционной системы.
  • Усечение данных: основано на принципах Section Access, который работает динамически и изменяет отображаемые данные. Поэтому одним приложением могут пользоваться разные пользователи, которые должны видеть разные данные. Функция реализуется через Qlik Sense Engine Service (QES).

Каждая из типов авторизации работает отдельно и не связана между собой.

Усечение данные определяет, какие данные разрешено видеть пользователю – весь пласт данных или только отдельные куски.

Права доступа, также как и в QlikView, определяются скриптом загрузки.

Разделы в скрипте

Контроль доступа реализуется через таблицу(ы) безопасности, загружаемые в Qlik Sense также, как и обычные данные. Эти таблицы могут храниться в базе данных. Скрипт управляет таблицами безопасности и доступом к данным.

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

Например:  

Системные поля Section Access

Уровни доступа назначаются пользователям в одной или нескольких таблицах, загружаемых с Section Access. Они могут содержать несколько различных пользовательских системных полей, обычно USERID, а также поле, определяющее уровень доступа, ACCESS.

Изменения Section Access Qlik Sense от QlikView коснулись имен доступных колонок. Рассмотрим их:

Колонка Описание
ACCESS Доступ может быть назначен пользователю или администратору (USER/ADMIN). ADMIN получает полный доступ к представленным данным. Если уровень доступа у пользователя не назначен, то он не имеет доступа к приложению. Пользователь (USER) имеет доступ только к тем данным, которые определены в таблице безопасности.
USERID Имя пользователя в формате [Директория пользователя]\[ID пользователя]. Состоит из точной связи с именем пользователя Qlik Sense. Информация о о пользователе сравнивается с информаций из прокси и значением по этому полю. Qlik Sense больше не использует аккаунты Windows, поэтому поля принятые для идентификации  пользователей в QlikView не используются.
GROUP Значение атрибута группы по пользователю. Напрямую связано с группой пользователей в Qlik Sense. Группа соотносится с данными прокси.
[REDUCTION] Поле, по которому выполняется усечение данных
OMIT Поля, которые должны быть недоступны для группы или пользователя (GROUP или USERID).  Поле может быть пустым и могут использоваться стандартные шаблоны поиска (*, ?).Не используйте OMIT в ключевых полях, поскольку это меняет структуру данных и неверному отображению данных.

Qlik Sense сравнивает пользователей по прокси и UserID, а затем соотносит пользователя относительно групп в таблице. Если пользователь принадлежит к группе, которой разрешен доступ, или пользователь совпадает, они получают доступ к приложению.

НА ЗАМЕТКУ! Поля безопасности могут размещаться в разных таблицах. Все поля, перечисленные в загрузке или в записях выборки в Section Access, должны быть написаны заглавными буквами. Поле можно сконвертировать на верхний регистр через функцию Upper перед их чтением или загрузкой. Использование функции может снижать скорость загрузки данных.

Qlik Sense: Динамическое усечение данных

Qlik Sense позволяет усекать данные динамически, то есть на основе логина Section Access пользователь будет видеть только те данные, которые ему нужны:

  • Поля (колонки) могут быть скрыты через системное поле OMIT.
  • Записи (строчки) могут быть скрыты через связывание данных Section Access и настоящих данных. Значение разделов показываются или не показываются на основе сравнения названий полей в Section Access и Section-приложении. 

Пример скрипта Section Access

  • Пользователь ADMIN видит все поля, а другие пользователи могут видеть строки только тогда, когда REDUCTION  1,2 или 3.
  • ПользовательA видит все поля, но только те строки, которые связаны с REDUCTION=1.
  • Пользователь B может видеть все поля, кроме NUM, а также только те строки, которые связаны с REDUCTION=2.
  • Пользователь C может видеть все поля, кромеALPHA, а также только те строки, которые связаны с REDUCTION=3.

Учетная запись INTERNAL\SA_SCHEDULER нужна, чтобы включить перезагрузку скрипта в задачах Qlik Management Console. 

НА ЗАМТЕКУ! В Qlik Sense есть функция запуска приложения без данных. То есть, если у вас есть права для изменения скрипта, то вы сможете открыть приложение, без загрузки данных. Это очень полезно, когда в процессе работы со скриптом у вас возникли непредвиденные ошибки, доступ к данным потерян. Section Access в Qlik Sense использует прямое исключение данных, что означает, когда у вас нет доступа, то вы вообще не увидите никакие данные. При таком подходе к доступу к данным вам сложно залочить приложение от самого себя, что часто бывало при работе с QlikView. Если у вас есть права доступа на редактирование скрипта, вы можете открыть приложение без данных. Вы можете изменить скрипт Section Access.

На этом сегодня все. Комментируйте, делитесь своим опытом использования SA в Qlik Sense.