Como alterar um Active Directory do Windows e LDS utilizador palavra-passe através do LDAP

Este artigo aplica-se para o Windows 2000. Suporte para o Windows 2000 termina em 13 de Julho de 2010. O é um ponto de partida para planear a estratégia de migração do Windows 2000. Para mais informações, consulte a .

Sumário

Pode definir a palavra-passe do utilizador do Active Directory do Windows e LDS através de LDAP Lightweight Directory Access Protocol () dadas certas restrições. Este artigo descreve como definir ou alterar o atributo de palavra-passe.

Estes passos também se aplicam a objectos de userProxy e utilizadores do ADAM e LDS da mesma forma como efectuado com utilizadores do AD.

Mais informações

A palavra-passe é armazenada no suporte de AD e base de dados LDS num objecto de utilizador no atributo unicodePwd . Este atributo pode ser escrito em condições restritas, mas não consegue ler. O atributo só pode ser modificado; não podem ser adicionado a criação de objectos ou consultado por uma procura.

Para modificar este atributo, o cliente tem de ter um 128-bit Transport Layer Security (TLS) / ligação de Secure Socket Layer (SSL) para o servidor. Uma sessão encriptada utilizando chaves de sessão criado SSP utilizar NTLM ou Kerberos também são aceitáveis, desde que o comprimento mínimo da chave for cumprido.

Para esta ligação para ser possível utilizar o TLS/SSL:

  • O servidor tem de possuir um certificado de servidor para uma ligação de RSA de 128 bits.

  • O cliente tem de confiar a autoridade de certificação (AC) que gerou o certificado de servidor.

  • Cliente e servidor tem de ser capazes de encriptação de 128 bits.



A sintaxe do atributo unicodePwd é a cadeia de octetos; No entanto, o serviço de directório espera que a cadeia de octeto irá conter uma cadeia UNICODE (como o nome do atributo indica). Isto significa que todos os valores para este atributo transmitidos LDAP tem de ser cadeias UNICODE são codificados em BER (Basic Encoding Rules) como uma cadeia de octeto. Além disso, a cadeia UNICODE tem de começar e terminar em propostas que não fazem parte da palavra-passe pretendida.

Existem duas formas para modificar o atributo unicodePwd . A primeira é semelhante a normal "utilizador alterar palavra-passe" operação. Neste caso, o pedido de modificar deve conter uma eliminação e uma operação de adição. A operação de eliminação deve conter a palavra-passe actual por aspas à volta do mesmo. A operação de adição deve conter a palavra-passe nova pretendida com aspas à volta do mesmo.

A segunda forma para modificar este atributo é semelhante a um administrador repor uma palavra-passe para um utilizador. Para tal, tem de associar o cliente como um utilizador com permissões suficientes para modificar a palavra-passe de outro utilizador. Este pedido de modificar deve conter uma operação de substituir único com a palavra-passe pretendida novo colocado entre aspas. Se o cliente tem permissões suficientes, esta palavra-passe tornam-se a palavra-passe nova, independentemente de qual era a palavra-passe antiga.

As duas funções seguintes fornecem exemplos destas operações:

ULONG ChangeUserPassword(WCHAR* pszUserDN, WCHAR* pszOldPassword,WCHAR* pszNewPassword)
{
ULONG err = 1;
LDAPMod modNewPassword;
LDAPMod modOldPassword;
LDAPMod *modEntry[3];
BERVAL newPwdBerVal;
BERVAL oldPwdBerVal;
BERVAL *newPwd_attr[2];
BERVAL *oldPwd_attr[2];
WCHAR pszNewPasswordWithQuotes[1024];
WCHAR pszOldPasswordWithQuotes[1024];

// Build an array of LDAPMod.

// For setting unicodePwd, this MUST be a double op.
modEntry[0] = &modOldPassword;
modEntry[1] = &modNewPassword;
modEntry[2] = NULL;

// Build mod struct for unicodePwd Add.
modNewPassword.mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;
modNewPassword.mod_type =L"unicodePwd";
modNewPassword.mod_vals.modv_bvals = newPwd_attr;

// Build mod struct for unicodePwd Delete.
modOldPassword.mod_op = LDAP_MOD_DELETE | LDAP_MOD_BVALUES;
modOldPassword.mod_type =L"unicodePwd";
modOldPassword.mod_vals.modv_bvals = oldPwd_attr;


// Password will be single valued, so we only have one element.
newPwd_attr[0] = &newPwdBerVal;
newPwd_attr[1]= NULL;
oldPwd_attr[0] = &oldPwdBerVal;
oldPwd_attr[1]= NULL;


// Surround the passwords in quotes.
wsprintf(pszNewPasswordWithQuotes,L"\"%s\"",pszNewPassword);
wsprintf(pszOldPasswordWithQuotes,L"\"%s\"",pszOldPassword);

// Build the BER structures with the UNICODE passwords w/quotes.
newPwdBerVal.bv_len = wcslen(pszNewPasswordWithQuotes) * sizeof(WCHAR);
newPwdBerVal.bv_val = (char*)pszNewPasswordWithQuotes;
oldPwdBerVal.bv_len = wcslen(pszOldPasswordWithQuotes) * sizeof(WCHAR);
oldPwdBerVal.bv_val = (char*)pszOldPasswordWithQuotes;


// Perform single modify.
err = ldap_modify_s(ldapConnection,
pszUserDN,
modEntry
);

if (err == LDAP_SUCCESS )
wprintf(L"\nPassword succesfully changed!\n");
else
wprintf(L"\nPassword change failed!\n");

return err;
}

ULONG SetUserPassword(WCHAR* pszUserDN, WCHAR* pszPassword)
{
ULONG err = 1;
LDAPMod modPassword;
LDAPMod *modEntry[2];
BERVAL pwdBerVal;
BERVAL *pwd_attr[2];
WCHAR pszPasswordWithQuotes[1024];

// Build an array of LDAPMod.
// For setting unicodePwd, this MUST be a single op.
modEntry[0] = &modPassword;
modEntry[1] = NULL;

// Build mod struct for unicodePwd.
modPassword.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES;
modPassword.mod_type =L"unicodePwd";
modPassword.mod_vals.modv_bvals = pwd_attr;

// Password will be single valued, so we only have one element.
pwd_attr[0] = &pwdBerVal;
pwd_attr[1]= NULL;

// Surround the password in quotes.
wsprintf(pszPasswordWithQuotes,L"\"%s\"",pszPassword);

// Build the BER structure with the UNICODE password.
pwdBerVal.bv_len = wcslen(pszPasswordWithQuotes) * sizeof(WCHAR);
pwdBerVal.bv_val = (char*)pszPasswordWithQuotes;


// Perform single modify.
err = ldap_modify_s(ldapConnection,
pszUserDN,
modEntry
);

if (err == LDAP_SUCCESS )
wprintf(L"\nPassword succesfully set!\n");
else
wprintf(L"\nPassword set failed!\n");

return err;
}

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×