Privilégios

Um privilégio é o direito de uma conta, como uma conta de usuário ou grupo, de executar várias operações relacionadas ao sistema no computador local, como desligar o sistema, carregar drivers de dispositivo ou alterar a hora do sistema. Os privilégios diferem dos direitos de acesso de duas maneiras:

  • Os privilégios controlam o acesso a recursos do sistema e tarefas relacionadas ao sistema, enquanto os direitos de acesso controlam o acesso a objetos protegíveis.
  • Um administrador do sistema atribui privilégios a contas de usuário e grupo, enquanto o sistema concede ou nega acesso a um objeto protegível com base nos direitos de acesso concedidos nas ACEs na DACL do objeto.

Cada sistema tem um banco de dados de conta que armazena os privilégios mantidos por contas de usuário e grupo. Quando um usuário faz logon, o sistema produz um token de acesso que contém uma lista dos privilégios do usuário, incluindo aqueles concedidos ao usuário ou a grupos aos quais o usuário pertence. Observe que os privilégios se aplicam somente ao computador local; uma conta de domínio pode ter privilégios diferentes em computadores diferentes.

Quando o usuário tenta executar uma operação privilegiada, o sistema verifica o token de acesso do usuário para determinar se o usuário tem os privilégios necessários e, em caso afirmativo, verifica se os privilégios estão habilitados. Se o usuário falhar nesses testes, o sistema não executará a operação.

Para determinar os privilégios mantidos em um token de acesso, chame a função GetTokenInformation , que também indica quais privilégios estão habilitados. A maioria dos privilégios é desabilitada por padrão.

A API do Windows define um conjunto de constantes de cadeia de caracteres, como SE_ASSIGNPRIMARYTOKEN_NAME, para identificar os vários privilégios. Essas constantes são as mesmas em todos os sistemas e são definidas em Winnt.h. Para obter uma tabela dos privilégios definidos pelo Windows, consulte Constantes de privilégio. No entanto, as funções que obtêm e ajustam os privilégios em um token de acesso usam o tipo LUID para identificar privilégios. Os valores LUID de um privilégio podem ser diferentes de um computador para outro e de uma inicialização para outra no mesmo computador. Para obter o LUID atual que corresponde a uma das constantes de cadeia de caracteres, use a função LookupPrivilegeValue . Use a função LookupPrivilegeName para converter um LUID em sua constante de cadeia de caracteres correspondente.

O sistema fornece um conjunto de nomes de exibição que descrevem cada um dos privilégios. Eles são úteis quando você precisa exibir uma descrição de um privilégio para o usuário. Use a função LookupPrivilegeDisplayName para recuperar uma cadeia de caracteres de descrição que corresponde à constante de cadeia de caracteres para um privilégio. Por exemplo, em sistemas que usam inglês dos EUA, o nome de exibição do privilégio SE_SYSTEMTIME_NAME é "Alterar a hora do sistema".

Você pode usar a função PrivilegeCheck para determinar se um token de acesso contém um conjunto especificado de privilégios. Isso é útil principalmente para aplicativos de servidor que estão representando um cliente.

Um administrador do sistema pode usar ferramentas administrativas, como o Gerenciador de Usuários, para adicionar ou remover privilégios para contas de usuário e grupo. Os administradores podem usar programaticamente as funções LSA ( Autoridade de Segurança Local ) para trabalhar com privilégios. As funções LsaAddAccountRights e LsaRemoveAccountRights adicionam ou removem privilégios de uma conta. A função LsaEnumerateAccountRights enumera os privilégios mantidos por uma conta especificada. A função LsaEnumerateAccountsWithUserRight enumera as contas que contêm um privilégio especificado.

Constantes de autorização

Habilitar e desabilitar privilégios no C++