Projetando funções de forma eficaz

Em muitos cenários, a segurança baseada em função é um mecanismo muito eficaz, mas há situações em que é menos eficaz. Você deve levar vários fatores em consideração ao decidir onde e como aplicar a segurança baseada em função a um aplicativo específico.

Características do usuário e dos dados e a adequação das funções

As funções funcionam muito bem para caracterizar grupos de usuários e, com base nisso, filtrar quais ações esses usuários podem executar. Muitas vezes, isso é realizado na prática criando funções que refletem o lugar de um usuário dentro de uma organização — por exemplo, as funções "Gerentes" e "Caixas", "Administradores" e "Leitores", "Funcionários do Projeto Um" e "Funcionários do Projeto Dois". Nesses casos, em que os dados que estão sendo acessados são bastante genéricos em relação aos usuários, as funções podem ser usadas com eficiência para impor regras de negócios, como as seguintes:

  • "Os gestores podem transferir qualquer quantia de dinheiro. Os caixas só podem transferir até US$ 10 mil."

  • "Os administradores podem mudar qualquer coisa. Todo mundo só sabe ler."

  • "Os funcionários do Project One podem acessar um determinado banco de dados. Ninguém mais pode."

Os usuários podem naturalmente cair em várias funções, dependendo de como as funções modelam a estrutura organizacional de uma empresa.

No entanto, as funções não funcionam muito bem quando uma decisão de acesso de segurança se baseia nas características de um determinado pedaço de dados. Por exemplo, seria difícil usar funções para refletir relações complicadas de dados do usuário, como as seguintes:

  • "Um determinado gerente pode acessar dados de pessoal apenas para seus relatórios."

  • "Joe Consumer pode consultar o saldo de sua conta."

Nesses casos, a verificação de segurança muitas vezes deve ser feita no próprio banco de dados, onde é mais fácil levar em conta características inatas dos dados que estão sendo acessados. Isso significa que você deve usar a representação para passar a identidade do cliente para o banco de dados e permitir que o banco de dados valide a solicitação. Isso pode afetar o desempenho e pode afetar o design do aplicativo — por exemplo, o pool de conexões pode não funcionar quando uma conexão é aberta sob uma identidade de usuário específica. Para obter uma discussão dos problemas envolvidos, consulte Segurança de aplicativos de várias camadas e Representação e delegação de cliente.

Complexidade e escalabilidade de uma política de autorização baseada em função

Qualquer política de segurança implementada será tão eficaz quanto sua implementação pelos administradores de sistema que implantam seu aplicativo. Se os administradores cometerem erros ao atribuir usuários às funções corretas de acordo com sua política de segurança, sua política não funcionará como esperado. É mais provável que ocorram problemas nas seguintes circunstâncias:

  • Você criou uma política baseada em função muito complexa, com muitas funções e usuários mapeando para várias funções.
  • Você cria funções com critérios ambíguos para quem deve pertencer a elas.
  • Há muitos usuários no site onde o aplicativo está instalado, e os usuários estão se movendo com frequência dentro da organização, mudando em relação às funções que você criou.
  • Há muitos administradores no site onde o aplicativo está instalado, com divisão de responsabilidades, de modo que um administrador familiarizado com os requisitos de segurança do seu aplicativo não está potencialmente familiarizado com os grandes grupos de usuários que devem usá-lo. Isso é particularmente preocupante à medida que os usuários se movem dentro da organização — essas informações precisam ser bem comunicadas.

Além disso, à medida que o número de funções atribuídas a um aplicativo aumenta, aumenta também a quantidade de tempo que o COM+ deve gastar procurando a associação do chamador nessas funções, com uma provável degradação no desempenho.

Para gerenciar a complexidade e mitigar essas preocupações, você pode usar as seguintes diretrizes:

  • Escolha nomes de função que sejam autodescritivos. Torne o mais óbvio possível quais usuários devem pertencer a quais funções.
  • Torne sua política baseada em função o mais simples possível (e não mais simples). Escolha o mínimo possível de funções, mantendo uma política eficaz.
  • Documente claramente a política baseada em função que você constrói para administradores, se a associação à função é óbvia (para você). Em particular, use o campo de descrição disponível para cada função para descrever a intenção da função. Se você não pode descrever geralmente quem deve pertencer ao papel em algumas frases, provavelmente é muito complicado.
  • Sugira fortemente que os administradores do seu aplicativo preencham funções com grupos de usuários em vez de usuários individuais. Esta é uma solução muito mais escalável. Isso facilita a reatribuição ou remoção de usuários à medida que eles se movem dentro da organização e isola os administradores de uma certa quantidade de supervisão e problemas na comunicação.

Limites de segurança

Informações de contexto de chamada de segurança

Propriedade de contexto de segurança

Usando funções para autorização de cliente