Como alterar a palavra-passe do Windows 2000 de um utilizador através de LDAP

Traduções de Artigos Traduções de Artigos
Artigo: 269190 - Ver produtos para os quais este artigo se aplica.
Importante
Este artigo aplica-se para o Windows 2000. Suporte para o Windows 2000 termina em 13 de Julho de 2010. O Windows 2000 End-of-Support Solution Center é um ponto de partida para planear a estratégia de migração a partir do Windows 2000. Para mais informações consulte a Microsoft Support Lifecycle Policy.
Expandir tudo | Reduzir tudo

Sumário

Pode definir a palavra-passe de um utilizador de Windows 2000 através do LDAP Lightweight Directory Access Protocol () dado determinadas restrições. Este artigo descreve como definir ou alterar o atributo de palavra-passe.

Mais Informação

A palavra-passe é armazenada no Active Directory num objecto de utilizador no atributo unicodePwd. Este atributo pode ser escrito em condições restritas, mas não é possível ler. O atributo só pode ser modificado; não podem ser adicionada na criação do objecto ou consultado por uma procura. Para modificar este atributo, o cliente tem de ter uma ligação de Secure Socket Layer (SSL) de 128 bits para o servidor. Para esta ligação para ser possível, o servidor tem de ter 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 e cliente e servidor tem de ser capazes de encriptação de 128 bits.

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

Existem duas formas possíveis para modificar o atributo unicodePwd. A primeira é semelhante a normal "utilizador alterar palavra-passe" operação. Neste caso, o pedido de modificação tem de conter uma eliminação e uma operação de adição. A operação de eliminação tem de conter a palavra-passe actual com aspas à volta do mesmo. A operação de adição tem de conter a palavra-passe de 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 efectuar este procedimento, o cliente deve ligar como um utilizador com permissões suficientes para modificar a palavra-passe de outro utilizador. Este pedido de modificação deve conter uma operação de substituir único com a nova de palavra-passe pretendida rodeada de aspas. Se o cliente tem permissões suficientes, esta palavra-passe tornar-se a nova palavra-passe, independentemente da palavra-passe antiga foi.

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;
}
				

Propriedades

Artigo: 269190 - Última revisão: 29 de junho de 2004 - Revisão: 3.7
A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
Palavras-chave: 
kbmt kbhowto kbmsg KB269190 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 269190

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com