Абсолютно не важно, какое у вас отношение к 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 является частью скрипта загрузки, где определяется таблица доступа к данным.
Например, таблица авторизации Section Access слева идет по полю Страна (COUNTRY).
НА ЗАМЕТКУ! Конечно, в живом приложении таблица авторизации невидна в модели данных.
Что означает авторизация по полю Страна? Когда пользователь с конкретным ID пользователя открывает приложение, программа определяет, какие поля таблицы клиентов будут для него видимы.
В Section Access нужно определить минимум три поля: ACCESS, USERID и поле усечения, которое выстраивает связь с нужными данными.
Итак, в этом примере пользователь связан с полем Страна, именно определяло видимость или невидимость строк из модели данных: строки, которые были связаны со страной, были видимы. Страна же выступала полем усечения данных.
Усечение данных в системах 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.
Например:
1 2 3 4 5 6 7 8 9 10 11 |
Section Access; LOAD * inline [ACCESS,USERID USER,U ]; Section Application; LOAD... ... from... ... |
Системные поля 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
section access; LOAD * inline [ ACCESS, USERID,REDUCTION, OMIT USER, AD_DOMAIN\ADMIN,*, USER, AD_DOMAIN\A,1, USER, AD_DOMAIN\B, 2,NUM USER, AD_DOMAIN\C, 3, ALPHA USER, INTERNAL\SA_SCHEDULER,*, ]; section application; T1: LOAD *, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3; |
- Пользователь 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.
Спасибо, очень хорошо описано, особенно для начинающего «КРАТКОЕ ОПИСАНИЕ ТЕХНОЛОГИИ».
Ещё бы реальный примерчик по «Объектному уровню доступа» 🙂