Partilhar via


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 aos recursos do sistema e às tarefas relacionadas ao sistema, enquanto os direitos de acesso controlam o acesso a objetos protegíveis.
  • Um administrador de 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 contas que armazena os privilégios detidos 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 aos grupos aos quais o usuário pertence. Observe que os privilégios se aplicam apenas 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 possui 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 executa a operação.

Para determinar os privilégios mantidos em um token de acesso, chame o 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 para um privilégio podem diferir de um computador para outro e de uma inicialização para outra no mesmo computador. Para obter o LUID de atual que corresponde a uma das constantes de cadeia de caracteres, use a funçãoLookupPrivilegeValue. Use a funçãoLookupPrivilegeName 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çãoLookupPrivilegeDisplayName 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 para o privilégio de SE_SYSTEMTIME_NAME é "Alterar a hora do sistema".

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

Um administrador de 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 Local Security Authority (LSA) para trabalhar com privilégios. As funções LsaAddAccountRights e LsaRemoveAccountRights adicionar ou remover privilégios de uma conta. A funçãoLsaEnumerateAccountRights enumera os privilégios mantidos por uma conta especificada. A função LsaEnumerateAccountsWithUserRight enumera as contas que possuem um privilégio especificado.

constantes de autorização

Habilitando e desabilitando privilégios em C++