你目前正处于脱机状态,正在等待 Internet 重新连接

如何更改通过 LDAP 的 Windows 2000 用户的密码

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 269190
注意
本文适用于 Windows 2000。Windows 2000 支持的结束,到 2010 7 月 13Windows 2000 End-of-Support Solution Center 是进行规划迁移策略从 Windows 2000 的起始位置。有关详细信息,请参阅 Microsoft Support Lifecycle Policy
概要
您可以设置在 Windows 2000 用户的密码通过该轻型目录访问协议 (LDAP) 提供某些限制。本文介绍如何设置或更改密码属性。
更多信息
密码存储在 Active Directory unicodePwd 属性中的用户对象上。此属性可写入受限制的情况下,但它不能读取。只能修改该属性 ; 它不能添加上创建对象或查询的搜索。若要修改此属性,客户端必须具有 128 位安全套接字层 (SSL) 连接到服务器。为此连接成为可能,服务器必须拥有一个 128 位 RSA 连接的服务器证书、 客户端必须信任生成服务器的证书,证书颁发机构 (CA) 和客户端和服务器必须能够 128 位加密。

unicodePwd 属性的语法是八位字节字符串 ; 但是,目录服务需要八位字节的字符串将包含一个 UNICODE 字符串 (如属性的名称指示)。这意味着任何为此属性的值传递在 LDAP 作为一个八位字节字符串必须是 BER 编码 (基本编码规则) 的 UNICODE 字符串。此外,UNICODE 字符串必须中的开始和结束不需密码的一部分的引号。

有两个可能的方法修改 unicodePwd 属性。第一个是类似于普通"用户更改密码"操作。在这种情况下修改请求必须包含一个删除和添加操作。删除操作必须包含当前的密码与它周围的引号。添加操作必须包含所需的新密码,其周围的引号。

若要修改此属性在第二种方法是类似于管理员重设用户密码。若要执行此操作在客户端必须具有足够的权限来修改另一用户的密码的用户身份将绑定。此修改请求应包含单个替换操作用新的所需的密码用引号引起来。如果客户端中有足够的权限此密码将成为新的密码而不考虑的旧密码是什么。

下面的两个函数提供了这些操作的示例:
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;}				

Warning: This article has been translated automatically

属性

文章 ID:269190 - 上次审阅时间:06/29/2004 22:47:36 - 修订版本: 3.7

Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Datacenter Server

  • kbmt kbhowto kbmsg KB269190 KbMtzh
反馈