Inserir um relatório com RLS
APLICA-SE A: Aplicativo possui dados O usuário possui dados
Este artigo explica como inserir o conteúdo do Power BI que usa o RLS em um aplicativo padrão do Power BI onde o aplicativo possui dados.
Pré-requisitos
Para obter uma explicação detalhada sobre como configurar o RLS, consulte RLS (segurança em nível de linha) com o Power BI.
Ao definir as funções de RLS, tenha em mente que a expressão DAX usada determina se o modelo RLS é estático ou dinâmico.
Quando usar a segurança estática e dinâmica
A segurança estática usa um valor fixo no filtro DAX para definir cada função. É simples de implementar, mas difícil de manter quando há muitos usuários ou organizações envolvidas.
A segurança estática funciona melhor para um ISV que atende a um ou alguns grandes clientes, onde cada departamento precisa acessar dados diferentes.
A segurança dinâmica usa uma função DAX (username()
ou userprincipalname()
) para definir as funções. A segurança dinâmica oferece mais flexibilidade e permite que você gerencie seus dados usando menos funções e menos manutenção.
Segurança estática
Com as funções estáticas, você passa a função para o Power BI quando gera um token de inserção e o usuário vê os dados de acordo com essa função. Para criar funções de segurança estáticas, insira um valor fixo no filtro DAX.
Por exemplo, você pode definir a função Leste dos EUA como [Region] = "East"
Digamos que john@contoso.com seja um usuário do seu aplicativo. Você deseja conceder acesso a John aos dados da função Leste dos EUA. Para inserir um relatório para john@contoso.com, gere um token de inserção usando a função Leste dos EUA. Os dados resultantes foram filtrados para [Region] = "East"
.
Observação
Ao gerar o token de inserção, é necessário fornecer um nome de usuário, que pode ser qualquer cadeia de caracteres. As funções estáticas têm um valor fixo que não depende de um nome de usuário, portanto, uma vez que o ISV determina a função do usuário e passa para o token de inserção, os dados são filtrados de acordo com essa função, independentemente do nome de usuário passado.
Segurança dinâmica
A segurança dinâmica usa uma função DAX (username()
ou userprincipalname()
) para definir as funções.
Quando o usuário possuir dados, o modelo RLS filtra automaticamente os dados com base nas funções do usuário específico.
Quando o aplicativo possuir dados, o Power BI não conhece os nomes de usuário dos clientes do ISV, portanto, a função username()
pode ser usada para filtrar dinamicamente os dados.
Crie uma função no Power BI Desktop usando a função username(). Por exemplo, é possível criar uma função chamada CountryDynamic e defini-la como [CountryRegionCode] = username()
Digamos que você queira conceder ao seu usuário, jane@contoso.comacesso aos dados para a França. Ao gerar um token de inserção, jane@contoso.comvocê passa a cadeia de caracteres França como o nome de usuário na função CountryDynamic. Seus dados são filtrados de acordo com [CountryRegionCode] = França.
{
"accessLevel": "View",
"identities": [
{
"username": "France",
"roles": [ "CountryDynamic"],
"datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
}
]
}
Ao usar a segurança dinâmica nesse cenário, apenas uma função é necessária para todas as regiões. O nome da região é usado como a identidade efetiva.
Gerar um token de inserção
Quando estiver pronto para inserir o relatório em seu aplicativo, você precisará gerar um token inserido. Para gerar um token usando a API de Token de Inserção, passe as informações a seguir para a API.
- nome de usuário (obrigatório): se as funções forem dinâmicas, a cadeia de caracteres nome de usuário será utilizada como filtro. Para funções estáticas, o nome de usuário não afeta o RLS e pode ser qualquer cadeia de caracteres. Apenas um nome de usuário pode ser listado.
- funções (obrigatório): a(s) função(ões) utilizada(s) na aplicação das regras de Segurança em Nível de Linha. Se você estiver passando mais de uma função, elas deverão ser passadas como uma matriz de cadeia de caracteres.
- conjunto de dados (obrigatório): o conjunto de dados aplicável ao item que você está incorporando.
Agora você pode incorporar o relatório ao seu aplicativo. O relatório filtra os dados de acordo com o RLS aplicado.
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;
}
Considerações e limitações
- Dependendo da configuração, talvez seja necessário executar várias etapas antes de gerar um token de inserção. Para obter informações sobre os diferentes cenários, confira Inserir um relatório que usa recursos de segurança.
- O usuário que gera o token de inserção deve ser um membro ou administrador em ambos os workspaces (o workspace do conjunto de dados e o workspace do relatório).
- Ao gerar o token de inserção, você precisa fornecer um nome de usuário e uma função. Se você não fizer isso, um dos seguintes eventos ocorrerá, dependendo se o token está sendo gerado pela entidade de serviço ou usuário mestre:
- Para uma entidade de serviço, a geração de token falha.
- Para um usuário mestre, a geração de token é bem-sucedida, mas os dados não são filtrados (todos os dados são retornados).
Conteúdo relacionado
Mais perguntas? Experimente a Comunidade do Power BI.