Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Umde entrada de controle de acessocondicional (ACE) permite que uma condição de acesso seja avaliada quando uma verificação de acesso é executada. A linguagem de definição do descritor de segurança (SDDL) fornece sintaxe para definir ACEs condicionais em um formato de cadeia de caracteres.
O SDDL para uma ACE condicional é o mesmo que para qualquer ACE, com a sintaxe da instrução condicional anexada ao final da cadeia de caracteres ACE. Para obter informações sobre SDDL, consulte Security Descriptor Definition Language.
O sinal "#" é sinônimo de "0" em atributos de recurso. Por exemplo, D:AI(XA; OICI;FA;;; WD; (OctetStringType==#1#2#3##)) é equivalente e interpretado como D:AI(XA; OICI;FA;;; WD; (OctetStringType==#01020300)).
- Formato de cadeia de caracteres ACE condicional
- Expressões condicionais
- Atributos
- Operadores
- de precedência do operador
- Valores desconhecidos
- Avaliação Condicional ACE
- Exemplos
- Tópicos relacionados
Formato de cadeia de caracteres ACE condicional
Cada ACE em um descritor de segurança cadeia de caracteres é colocado entre parênteses. Os campos da ACE estão na seguinte ordem e estão separados por ponto-e-vírgula (;).
AceType**;AceFlags;Direitos;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**
Os campos são conforme descrito em ACE Strings, com as seguintes exceções.
O campo AceType pode ser uma das seguintes cadeias de caracteres.
Cadeia de caracteres do tipo ACE Constante em Sddl.h Valor AceType "XA" SDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE "XD" SDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE A cadeia de caracteres ACE inclui uma ou mais expressões condicionais, entre parênteses no final da cadeia de caracteres.
Expressões condicionais
Uma expressão condicional pode incluir qualquer um dos seguintes elementos.
| Elemento de expressão | Descrição |
|---|---|
|
AttributeName |
Testa se o atributo especificado tem um valor diferente de zero. |
|
existeAttributeName |
Testa se o atributo especificado existe no contexto do cliente. |
|
AttributeNameOperadorValor |
Retorna o resultado da operação especificada. |
|
ConditionalExpression**||**ConditionalExpression |
Testa se uma das expressões condicionais especificadas é verdadeira. |
|
ConditionalExpression&&ConditionalExpression |
Testa se ambas as expressões condicionais especificadas são verdadeiras. |
|
! (ConditionalExpression) |
O inverso de uma expressão condicional. |
|
Member_of{SidArray} |
Testa se a matriz SID_AND_ATTRIBUTES do contexto do cliente contém todos os de de Identificadores de Segurança (SIDs) na lista separada por vírgulas especificada por SidArray. Para Permitir ACEs, um SID de contexto de cliente deve ter o atributo SE_GROUP_ENABLED definido para ser considerado uma correspondência. Para Negar ACEs, um SID de contexto de cliente deve ter o atributo SE_GROUP_ENABLED ou o atributo SE_GROUP_USE_FOR_DENY_ONLY definido para ser considerado uma correspondência. A matriz SidArray pode conter cadeias de caracteres SID (por exemplo, "S-1-5-6") ou aliases SID (por exemplo, "BA" |
Atributos
Um atributo representa um elemento na matriz AUTHZ_SECURITY_ATTRIBUTES_INFORMATION no contexto do cliente. Um nome de atributo pode conter quaisquer caracteres alfanuméricos e qualquer um dos caracteres ":", "/", ".", e "_".
Um valor de atributo pode ser qualquer um dos seguintes tipos.
| Tipo de valor | Descrição |
|---|---|
| Inteiro |
Um inteiro de 64 bits em notação decimal ou hexadecimal. |
| String |
Um valor de cadeia de caracteres delimitado por aspas. |
| SID |
SID(S-1-1-0) ou SID(BA). Tem que estar em RHS de Member_of ou Device_Member_of. |
| BLOB |
# seguido de números hexadecimais. Se o comprimento dos números for ímpar, então o # é traduzido para um 0 para torná-lo par. Além disso, um # que aparece em outro lugar no valor é traduzido para um 0. |
Operadores
Os operadores a seguir são definidos para uso em expressões condicionais para testar os valores de atributos. Todos eles são operadores binários e usados na forma AttributeNameOperatorValue.
| Operador | Descrição |
|---|---|
| == |
Definição convencional. |
| != |
Definição convencional. |
| < |
Definição convencional. |
|
<= |
Definição convencional. |
| > |
Definição convencional. |
|
>= |
Definição convencional. |
| Contém |
TRUE se o valor do atributo especificado for um superconjunto do valor especificado; caso contrário, FALSO. |
| Any_of |
TRUE se o valor especificado for um superconjunto do valor do atributo especificado; caso contrário, FALSO. |
Além disso, os operadores unários Exists, Member_of e negation (!) são definidos conforme descrito na tabela Expressões Condicionais.
O operador "Contém" deve ser precedido e seguido por espaço em branco, e o operador "Any_of" deve ser precedido por espaço em branco.
Precedência do operador
Os operadores são avaliados na seguinte ordem de precedência, com operações de igual precedência sendo avaliadas da esquerda para a direita.
- Existe, Member_of
- Contém, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
Além disso, qualquer parte de uma expressão condicional pode ser colocada entre parênteses. As expressões entre parênteses são avaliadas primeiro.
Valores desconhecidos
Os resultados de expressões condicionais às vezes retornam um valor de Desconhecido. Por exemplo, qualquer uma das operações relacionais retorna Desconhecido quando o atributo especificado não existe.
A tabela a seguir descreve os resultados de uma operação lógica E entre duas expressões condicionais, ConditionalExpression1 e ConditionalExpression2.
| ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1&&ConditionalExpression2 |
|---|---|---|
|
VERDADEIRO |
VERDADEIRO |
VERDADEIRO |
|
VERDADEIRO |
FALSO |
FALSO |
|
VERDADEIRO |
DESCONHECIDO |
DESCONHECIDO |
|
FALSO |
VERDADEIRO |
FALSO |
|
FALSO |
FALSO |
FALSO |
|
FALSO |
DESCONHECIDO |
FALSO |
|
DESCONHECIDO |
VERDADEIRO |
DESCONHECIDO |
|
DESCONHECIDO |
FALSO |
FALSO |
|
DESCONHECIDO |
DESCONHECIDO |
DESCONHECIDO |
A tabela a seguir descreve os resultados de uma operação lógica de OU entre duas expressões condicionais, ConditionalExpression1 e ConditionalExpression2.
| ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1||ConditionalExpression2 |
|---|---|---|
|
VERDADEIRO |
VERDADEIRO |
VERDADEIRO |
|
VERDADEIRO |
FALSO |
VERDADEIRO |
|
VERDADEIRO |
DESCONHECIDO |
VERDADEIRO |
|
FALSO |
VERDADEIRO |
VERDADEIRO |
|
FALSO |
FALSO |
FALSO |
|
FALSO |
DESCONHECIDO |
DESCONHECIDO |
|
DESCONHECIDO |
VERDADEIRO |
VERDADEIRO |
|
DESCONHECIDO |
FALSO |
DESCONHECIDO |
|
DESCONHECIDO |
DESCONHECIDO |
DESCONHECIDO |
A negação de uma expressão condicional com um valor de UNKNOWN também é UNKNOWN.
Avaliação condicional da ECA
A tabela a seguir descreve o resultado da verificação de acesso de uma ACE condicional, dependendo da avaliação final da expressão condicional.
| Tipo ACE | VERDADEIRO | FALSO | DESCONHECIDO |
|---|---|---|---|
| Permitir |
Permitir |
Ignorar ACE |
Ignorar ACE |
| Negar |
Negar |
Ignorar ACE |
Negar |
Exemplos
Os exemplos a seguir mostram como as políticas de acesso especificadas são representadas por uma ACE condicional definida usando SDDL.
-
Política
-
Permitir Executar para Todos se ambas as condições a seguir forem atendidas:
- Título = PM
- Divisão = Finanças ou Divisão = Vendas
-
SDDL
-
D:(XA; ; FX;;; S-1-1-0; (@User.Title=="PM" && (@User.Divisão=="Finanças" || @User.Division ==" Vendas")))
-
Política
-
Permitir a execução se algum dos projetos do usuário se cruzar com os projetos do arquivo.
-
SDDL
-
D:(XA; ; FX;;; S-1-1-0; (@User.Projeto Any_of @Resource.Project))
-
Política
-
Permita acesso de leitura se o usuário tiver feito login com um cartão inteligente, for um operador de backup e estiver se conectando a partir de uma máquina com o Bitlocker habilitado.
-
SDDL
-
D:(XA; ;FR;;; S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))