Поделиться через


Внедрение отчета с помощью RLS

ОБЛАСТЬ ПРИМЕНЕНИЯ: Приложение владеет данными, принадлежащими пользователю данных

В этой статье объясняется, как внедрить содержимое Power BI, использующее RLS, в стандартное приложение Power BI владеет приложением данных.

Необходимые компоненты

Подробные сведения о настройке RLS см. в разделе "Безопасность на уровне строк" (RLS) с помощью Power BI.

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

Когда следует использовать статическую и динамическую безопасность

Статическая безопасность использует фиксированное значение в фильтре DAX для определения каждой роли. Это просто реализовать, но трудно поддерживать, когда участвует множество пользователей или организаций.

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

Динамическая безопасность использует функцию DAX (username() или userprincipalname()) для определения ролей. Динамическая безопасность обеспечивает большую гибкость и позволяет управлять данными, используя меньше ролей и меньше обслуживания.

Статическое обеспечение безопасности

При использовании статических ролей вы передаете роль в Power BI при создании маркера внедрения, а пользователь видит данные в соответствии с этой ролью. Чтобы создать статические роли безопасности, введите фиксированное значение в фильтре DAX.

Например, можно определить роль восточной части США как [Region] = "East"

Снимок экрана: определение статической роли R L S.

Предположим, john@contoso.com это пользователь вашего приложения. Вы хотите предоставить Джону доступ к данным из восточной части США . Чтобы внедрить отчет, john@contoso.comсоздайте маркер внедрения с помощью роли Восточной части США . Полученные данные фильтруются для [Region] = "East".

Примечание.

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

Динамическая безопасность

Динамическая безопасность использует функцию DAX (username() или userprincipalname()) для определения роли.

В сценарии владения данными модель RLS автоматически фильтрует данные на основе ролей конкретного пользователя. При использовании данных приложения Power BI не знает имена пользователей клиентов поставщика программного обеспечения, поэтому вы можете использовать username() функцию для динамического фильтрации данных.

Создайте роль в Power BI Desktop с помощью функции username(). Например, можно создать роль с именем CountryDynamic и определить ее как [CountryRegionCode] = username()

Снимок экрана: создание динамической роли R L S.

Предположим, вы хотите предоставить пользователю jane@contoso.comдоступ к данным для Франции. При создании маркера jane@contoso.comвнедрения передайте строку France в качестве имени пользователя в роли CountryDynamic . Данные фильтруются в соответствии с [CountryRegionCode] = France.

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "France",
            "roles": [ "CountryDynamic"],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

При использовании динамической безопасности в этом сценарии требуется только одна роль для всех регионов. Имя региона используется в качестве действующего удостоверения.

Создание маркера внедрения

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

  • имя пользователя (обязательно) — если роли являются динамическими, строка имени пользователя используется в качестве фильтра. Для статических ролей имя пользователя не влияет на RLS и может быть любой строкой вообще. Можно указать только одно имя пользователя.
  • роли (обязательные) — роли , используемые при применении правил безопасности на уровне строк. При выборе нескольких ролей их нужно передавать в виде массива строк.
  • набор данных (обязательный) — набор данных, применимый для внедренного элемента.

Теперь вы можете внедрить отчет в приложение. Отчет фильтрует данные в соответствии с примененными RLS.

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

Рекомендации и ограничения

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

Дополнительные вопросы? Попробуйте Сообщество Power BI.