# Управление безопасностью данных с помощью Section Access

Section Access используется для управления безопасностью приложения. Практически это часть скрипта загрузки данных, в которую добавляется таблица безопасности, определяющая, кто что может просматривать. Qlik Sense использует эту информацию для сокращения объема данных до соответствующей области, когда пользователь открывает приложение, то есть часть данных в приложении будет скрыта от пользователя в зависимости от его удостоверения. Section Access тесно интегрирован с данными в приложении и полагается на них для управления доступом. Эта форма динамического сокращения данных может предназначаться для строк таблицы, столбцов таблицы или их комбинации. Для получения дополнительной информации см. раздел [Доверие и безопасность в Qlik](https://www.qlik.com/us/trust).

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

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

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

Пример:

```
Section Access;
Load * INLINE [
    ACCESS,  USERID,                 REDUCTION
    USER,    AD_DOMAIN\ADMIN,        *
    USER,    AD_DOMAIN\A,            1
    USER,    AD_DOMAIN\B,            2
    USER,    AD_DOMAIN\C,            3
    ADMIN,   INTERNAL\SA_SCHEDULER,        
];
Section Application;
T1:
Load *,
NUM AS REDUCTION;
LOAD
Chr(RecNo()+ord('A')-1) AS ALPHA,
RecNo() AS NUM
AUTOGENERATE 3;
		
```

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

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

Уровни доступа назначаются пользователям в одной или нескольких таблицах безопасности, загруженных в части Section Access скрипта. Эти таблицы должны содержать как минимум два системных поля: ACCESS — поле, которое определяет уровень доступа, и USERID или USER.EMAIL. Другие дополнительные системные поля можно добавить в зависимости от варианта использования. Ниже описан полный набор системных полей Section Access.

#### ACCESS

Определяет, какой уровень доступа должен иметь соответствующий пользователь.

Доступ к приложениям Qlik Sense может быть авторизован для указанных пользователей. В таблице безопасности пользователям могут быть назначены уровни доступа ADMIN или USER. Пользователь с правами ADMIN имеет доступ ко всем данным в приложении, если они не ограничены таблицей безопасности. Пользователь с правами USER имеет доступ только к данным, определенным в таблице безопасности. Если уровень доступа не назначен, пользователь не сможет открыть приложение.

Если Section Access используется в сценарии перезагрузки, сервисному пользователю планировщика INTERNAL\SA\_SCHEDULER требуется доступ ADMIN для выполнения перезагрузок. Пример.

```
Section Access;
LOAD * inline [
    ACCESS,  USERID
    ADMIN,   INTERNAL\SA_SCHEDULER
];
```

Если нежелательно использовать учетную запись INTERNAL\SA\_SCHEDULER, альтернативный метод см. в разделе [Использование олицетворения для перезагрузки данных](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/Security/manage-security-with-section-access.htm#Impersonation).

Если в сценарии создания приложения On-demand (ODAG) в приложении шаблона используется Section Access, пользователя INTERNAL\SA\_API необходимо включить в таблицу Section Access в качестве ADMIN. Пример.

```
Section Access;
LOAD * inline [
    ACCESS,  USERID
    ADMIN,   INTERNAL\SA_API
];
```

#### USERID

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

Знак подстановки (\*) интерпретируется как все пользователи согласно дальнейшим условиям, указанным в таблице безопасности. Например, в следующей таблице безопасности пользователи, которые относятся к администраторам клиента Qlik Sense, могут просматривать все перечисленные значения поля REDUCTION.

Section Access; LOAD \* INLINE [ ACCESS, USERID, GROUP, REDUCTION ADMIN, \*, Qlik Sense Tenant Admins, \* USER, QLIK-POC\SOMEOTHERUSER1, \*, 1 USER, QLIK-POC\SOMEOTHERUSER2, \*, 2 ... ];

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

#### NTNAME

Примечание к информацииNTNAME — это поле из прежних версий QlikView, рекомендуется использовать USERID, если QlikView не использует ту же таблицу безопасности.

Поле, в котором должна содержаться строка, соответствующая имени пользователя или имени группы домена Windows NT. Если применяется другая система проверки подлинности, она должна содержать имя аутентифицируемого пользователя. Программа Qlik Sense получит сведения о входе в систему из ОС и сравнит ее со значением в данном поле.

#### GROUP

Содержит строку, соответствующую группе в программе Qlik Sense. Программа Qlik Sense разрешит пользователя, предоставленного прокси-службой, по этой группе.

#### SERIAL

Примечание к информацииSERIAL — устаревшее поле программы QlikView и не используется, если применяется только Qlik Sense.

Содержит строку, соответствующую платформе. Если поле содержит строку ‘QLIKSENSE’ или знак подстановки ‘\*’, доступ может быть предоставлен в зависимости от других полей в таблице безопасности.

Примечание к информацииЕсли поле SERIAL содержит номер лицензии, то строка доступа к секции запретит доступ к документу. Этот параметр допустим только в QlikView.

#### OMIT

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

Примечание к информацииНе рекомендуется применять OMIT к ключевым полям. Исключенные ключевые поля видны в просмотре модели данных, но их содержимое недоступно. Это может запутать пользователя. Кроме того, применение OMIT к полям, использующимся в визуализации, может привести к неполному отображению визуализации для пользователей, не имеющих доступа к опущенным полям.

## Управление доступом пользователя к приложению

Section Access в своей самой простой форме может использоваться для ограничения доступа определенных пользователей к приложению. Доступ пользователям к приложению запрещен посредством исключения. Другими словами, если определенный идентификатор пользователя не указан в таблице безопасности, он не сможет получить доступ к приложению. Единственное исключение из этого правила — знак подстановки (\*) присвоен полю USERID в одной из строк таблицы безопасности. В этом случае знак подстановки означает, что все аутентифицированные пользователи могут получить доступ к приложению. Вот пример таблицы безопасности со списком идентификаторов пользователей:

Section Access; LOAD \* inline [ ACCESS, USERID ADMIN, AD\_DOMAIN\ADMIN USER, AD\_DOMAIN\A USER, AD\_DOMAIN\B ]; Section Application;

## Управление доступом пользователя к определенным данным в приложении

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

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

Ограничьте доступ к данным на уровне строк, добавив столбец сокращения количества данных в таблицу безопасности в разделе доступа скрипта загрузки. Определенные записи (строки) можно скрыть от пользователей путем привязки данных Section Access к реальным данным. Выбор данных для отображения или исключения управляется с помощью одного или нескольких полей с общими именами в разделах скрипта Section Access и Section Application. После входа пользователя в систему программа Qlik Sense сопоставляет выборки в полях секции доступа с любыми полями приложения секции приложения с точно такими же именами (имена полей должны быть написаны в верхнем регистре). После создания выборок программа Qlik Sense постоянно скрывает все данные, исключенные этими выборками, от пользователя. Если знак подстановки (\*) используется в качестве значения поля в столбце сокращения количества данных, он интерпретируется как разрешение доступа пользователю к записям, связанным со всеми выбранными полями сокращения в таблице безопасности.

Когда Qlik Sense сравнивает поле сокращения в Section Access с полями в модели данных, ожидается следующее поведение:

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

* Если значение поля сокращения не соответствует ни одному из значений полей в модели данных, приложение не откроется для обычного ПОЛЬЗОВАТЕЛЯ. Но оно откроется без сокращений для пользователя с ролью АДМИНИСТРАТОР.

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

Примечание к информации

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

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

Примечание к информацииПо умолчанию включение перезагрузки скрипта в задаче Консоль управления Qlik должен выполнять пользователь учетной записи INTERNAL\SA\_SCHEDULER с правом доступа ADMIN. Если нежелательно использовать учетную запись INTERNAL\SA\_SCHEDULER, альтернативный метод см. в разделе [Использование олицетворения для перезагрузки данных](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/Security/manage-security-with-section-access.htm#Impersonation).

Пример: Сокращение количества данных на уровне строки на основе удостоверения пользователя

Section Access; Authorization: LOAD \* inline [ ACCESS, USERID, REDUCTION ADMIN, AD\_DOMAIN\ADMIN, \* USER, AD\_DOMAIN\A, 1 USER, AD\_DOMAIN\B, 2 USER, AD\_DOMAIN\C, \* ADMIN, INTERNAL\SA\_SCHEDULER, \* ]; Section Application; T1: LOAD \*, NUM AS REDUCTION; LOAD RecNo() AS NUM AUTOGENERATE 3;

В этом примере поле REDUCTION (в верхнем регистре) теперь присутствует и в разделе Section Access, и в разделе Section Application (все значения полей также должны быть в верхнем регистре). Обычно два поля будут разделены и различны, но если используется Section Access, поля будут связаны, а количество записей, отображаемых для пользователя, сокращено.

Будет получен следующий результат:

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

### Управление доступом к данным на уровне столбцов

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

Пример: Сокращение количества данных столбца на основе удостоверения пользователя

Section Access; LOAD \* inline [ ACCESS, USERID, REDUCTION, OMIT ADMIN, AD\_DOMAIN\ADMIN, \*, USER, AD\_DOMAIN\A, 1, USER, AD\_DOMAIN\B, 2, NUM USER, AD\_DOMAIN\C, 3, ALPHA ADMIN, INTERNAL\SA\_SCHEDULER, \*, ]; Section Application; T1: LOAD \*, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3;

Поле OMIT в разделе Section Access определяет поля, которые должны быть скрыты от пользователя.

Будет получен следующий результат:

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

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

### Управление доступом к группам пользователей

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

Пример: Сокращение количества данных на основе групп пользователей

Section Access; LOAD \* inline [ ACCESS, USERID, GROUP, REDUCTION, OMIT USER, \*, ADMIN, \*, USER, \*, A, 1, USER, \*, B, 2, NUM USER, \*, C, 3, ALPHA USER, \*, GROUP1, 3, ADMIN, 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, могут просматривать данные, связанные с REDUCTION=2, во всех полях, кроме поля NUM
* Пользователи, принадлежащие к группе C, могут просматривать данные, связанные с REDUCTION=3, во всех полях, кроме поля ALPHA
* Пользователи, принадлежащие к группе GROUP1, могут просматривать данные, связанные с REDUCTION=3, во всех полях

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

## Использование олицетворения для перезагрузки данных

Внутренняя системная учетная запись, SA\_SCHEDULER, используется по умолчанию для выполнения задач перезагрузки. Эта учетная запись имеет повышенные права и технически может использовать любой источник данных. Однако в QMC есть параметр, который использует олицетворение для выполнения задач перезагрузки с разрешениями владельца приложения вместо внутренней системной учетной записи. Путем настройки этого параметра владелец приложения, а не SA\_SCHEDULER будет использоваться для перезагрузок, то есть добавлять SA\_SCHEDULER в таблицу Section Access не нужно, вместо этого нужно добавить владельца приложения. В цепочке задач у приложений могут быть различные владельцы с разрешениями на источники, зависящие от прав доступа каждого владельца. Для получения дополнительной информации см. [кластер служб](https://help.qlik.com/en-US/sense-admin/November2024/Subsystems/DeployAdministerQSE/Content/Sense_DeployAdminister/QSEoW/Administer_QSEoW/Managing_QSEoW/service-cluster.htm) (только английский язык).

## Управление доступом пользователей в многооблачной среде

Многооблачная среда Qlik Sense включает сочетание механизмов подлинности пользователя. Обычно в Qlik Sense Enterprise on Windows USERID в разделе Section Access таблицы безопасности проверяется прокси-службой. В Qlik Cloud роль проверки подлинности берет на себя поставщик удостоверений. Следовательно, Section Access, который настроен для локальной среды, такой как Qlik Sense Enterprise on Windows, не будет работать в облачной среде.

При использовании поставщика удостоверений OIDC или SAML (Qlik IdP или пользовательского поставщика удостоверений) с Qlik Cloud, subject claim применяется для идентификации пользователей при входе в систему. Section Access сравнивает значение поля USERID в таблице безопасности со значением subject claim. При настройке клиента убедитесь, что имя учетной записи SAM сопоставлено с subject claim поставщика удостоверений. Так, например, если имя учетной записи SAM — AD\_DOMAIN\Dev, установите AD\_DOMAIN\Dev для subject claim. Если нужно просмотреть значение subject claim в IdP, добавьте /api/v1/diagnose-claims к URL-адресу клиента в браузере, например: your-tenant.us.qlikcloud.com/api/v1/diagnose-claims. В ответе JSON subject claim называется sub.

Если не удается использовать имя учетной записи SAM, есть альтернативный способ проверить подлинность пользователя. Так как в разных средах обычно используются одни и те же адреса электронной почты, можно использовать поле USER.EMAIL вместо USERID в таблице безопасности. Вот как может выглядеть таблица безопасности.

| ACCESS | USERID | USER.EMAIL | Комментарий | COUNTRY |
| --- | --- | --- | --- | --- |
| USER | ABC\Joe | \* | Локальный доступ | США |
| USER | \* | joe.smith@example.com | Доступ в облаке | США |
| USER | ABC\Ursula | \* | Локальный доступ | Германия |
| USER | \* | ursula.schultz@example.com | Доступ в облаке | Германия |
| USER | ABC\Stefan | \* | Локальный доступ | Швеция |
| USER | \* | stefan.svensson@example.com | Доступ в облаке | Швеция |

Скрипт авторизации:

Section Access; LOAD \* INLINE [ ACCESS, USERID, USER.EMAIL, COUNTRY USER, ABC\Joe, \*, United States USER, \*, joe.smith@example.com, United States USER, ABC\Ursula, \*, Germany USER, \*, ursula.schultz@example.com, Germany USER, ABC\Stefan, \*, Sweden USER, \*, stefan.svensson@example.com, Sweden ];

Обратите внимание, что у каждого пользователя есть две записи: одна для локального и одна для облачного доступа. Знаки подстановки обеспечивают использование только соответствующих полей проверки подлинности. В этом примере COUNTRY используется в качестве поля для сокращения количества данных.

## Использование Section Access и Insight Advisor Chat

Чтобы приложения, использующие Section Access стали доступны в Insight Advisor Chat, в скрипте Section Access необходимо предоставить административные права доступа следующим пользователям службы:

* INTERNAL/sa\_repository: делает скрипт Section Access доступным в службе репозитория для управления доступом пользователей.

* INTERNAL/sa\_scheduler: позволяет приложению выполнять перезагрузку с помощью задач QMC.

Примечание к предупреждению

Если в именах приложений, полей и основных элементов содержится конфиденциальная информация, они могут стать видимыми в результате обеспечения доступности приложений с Section Access для Insight Advisor Chat. Рекомендации приложений для запросов включают приложения в потоках, к которым пользователь имеет доступ. Эти потоки могут включать приложения, к которым у пользователя нет доступа в Section Access приложения. Однако при выборе таких приложений ничего не произойдет. При выборе Измерения или Меры для просмотра доступных элементов в приложении с использованием Section Access, пользователи могут увидеть объекты, к которым у них нет доступа. Однако при выборе этих элементов пользователи не увидят соответствующих данных.

Пример:

Section Access; LOAD \* inline [ USERID ,ACCESS INTERNAL\sa\_repository ,ADMIN INTERNAL\sa\_scheduler ,ADMIN DOMAINNAME\user1 ,ADMIN DOMAINNAME\user2 ,USER DOMAINNAME\user3 ,USER ];

После добавления этих пользователей в скрипт Section Access это приложение можно сделать доступным для Insight Advisor Chat. Когда приложение перезагрузится, оно станет доступным в Insight Advisor Chat.

## Использование QVD с Section Access

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

Оптимизированные загрузки не работают при использовании файлов QVD с Section Access. Если требуется использовать файл QVD для загрузки данных в Section Access, необходимо расширить файл QVD. Самый простой способ расширения файла QVD — изменить форматирование при загрузке данных.

В следующем примере файл QVD не расширяется, так как к данным не применяется форматирование.

Пример: Неработающий пример без форматирования данных (оптимизированная загрузка)

section access; LOAD ACCESS, USERID, PASSWORD, [GROUP] FROM SAccess.qvd (qvd);

Вместо этого можно использовать функцию upper() для форматирования данных, в результате чего произойдет расширение файла QVD.

Пример: Рабочий пример с форматированием данных

section access; LOAD ACCESS, USERID, PASSWORD, upper([GROUP]) as [GROUP] FROM SAccess.qvd (qvd);

Также можно добавить предложение Where 1=1 в оператор LOAD.

Пример: Еще один рабочий пример с форматированием данных

section access; LOAD ACCESS, USERID, PASSWORD, [GROUP] FROM SAccess.qvd (qvd) where 1=1;

## Инструкции и советы по использованию Section Access

Вот некоторые важные факты и полезные советы, которые нужно знать о Section Access.

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

  Для получения дополнительной информации см. раздел [Upper — функция скриптa и диаграммы](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Upper.htm).

* Нельзя использовать имена системных полей Section Access, перечисленные в качестве имен полей, в вашей модели данных.

* Перед тем как применить элементы управления Section Access, необходимо опубликовать приложения. Новые или измененные скрипты Section Access не применятся после перезагрузки приложения.

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

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

* Во избежание доступа к данным с ограниченным доступом после публикации приложения удалите все прикрепленные файлы с параметрами Section Access. Публикуемое приложение включает прикрепленные файлы. При копировании публикуемого приложения прикрепленные файлы включаются в копию. Однако, если к прикрепленным файлам данных были применены ограничения Section Access, при копировании прикрепленных файлов параметры Section Access не сохраняются, поэтому пользователи скопированного приложения могут видеть все данные прикрепленных файлов.

* Знак подстановки (\*) интерпретируется как все (перечисленные) значения поля в таблице. При использовании в одном из системных полей (USERID, GROUP) в таблице, загруженной в раздел Section Access скрипта, этот символ интерпретируется как все (также и неперечисленные) возможные значения этого поля.

* Поля безопасности могут быть помещены в разные таблицы.

* При загрузке данных из файла QVD использование функции Upper приведет к снижению скорости загрузки.

* Если вы заблокировали себе доступ к приложению с помощью настройки Section Access, можно открыть приложение без данных и отредактировать Section Access в скрипте загрузки данных. Для этого требуется доступ для редактирования и перезагрузки скрипта загрузки данных.

  Для получения дополнительной информации см. [Открытие приложения без данных](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Apps/open-app.htm#open-app-without-data).

* Загрузка двоичного файла вызовет наследование ограничений доступа новым приложением Qlik Sense.