Τρόπος αλλαγής ενός κωδικού πρόσβασης χρήστη υπηρεσίας καταλόγου Active Directory των Windows και LDS μέσω LDAP

Ισχύει για: Microsoft Windows Server 2003 Enterprise Edition (32-bit x86)Microsoft Windows Server 2003 Enterprise Edition for Itanium-based SystemsMicrosoft Windows Server 2003 Enterprise x64 Edition

Αυτό το άρθρο ισχύει για τα Windows 2000. Υποστήριξη για τα Windows 2000 λήγει στις 13 Ιουλίου 2010. Το Κέντρο λύσεων του τέλους της υποστήριξης των Windows 2000 είναι ένα σημείο εκκίνησης για το σχεδιασμό σας στρατηγικής μετεγκατάστασης από τα Windows 2000. Για περισσότερες πληροφορίες, ανατρέξτε στην Πολιτική κύκλου ζωής υποστήριξης της Microsoft.

Σύνοψη


Μπορείτε να ορίσετε Windows Active Directory και LDS του κωδικού πρόσβασης ενός χρήστη μέσω του Lightweight Directory Access πρωτοκόλλου (LDAP) δίνεται ορισμένους περιορισμούς. Αυτό το άρθρο περιγράφει τον τρόπο για να ορίσετε ή να αλλάξετε το χαρακτηριστικό κωδικό πρόσβασης.

Αυτά τα βήματα ισχύουν και για χρήστες ADAM και LDS και αντικείμενα userProxy με τον ίδιο τρόπο όπως γίνει με AD χρήστες.

Περισσότερες πληροφορίες


Ο κωδικός πρόσβασης αποθηκεύεται το διαφημιστικό και LDS βάσης δεδομένων σε ένα αντικείμενο χρήστη στο χαρακτηριστικό unicodePwd . Αυτό το χαρακτηριστικό μπορεί να εγγραφεί υπό συνθήκες περιορισμένης πρόσβασης, αλλά δεν μπορεί να διαβάσει. Το χαρακτηριστικό μπορεί να τροποποιηθεί μόνο; δεν μπορούν να προστεθούν κατά τη δημιουργία του αντικειμένου ή το ερώτημα από την αναζήτησή σας.

Για να τροποποιήσετε αυτό το χαρακτηριστικό, ο υπολογιστής-πελάτης πρέπει να έχει ένα 128-bit Transport Layer Security (TLS) / Secure Socket Layer (SSL) σύνδεση με το διακομιστή. Μια κρυπτογραφημένη περίοδος λειτουργίας με τη χρήση κλειδιών περιόδου λειτουργίας που δημιουργούνται από την υπηρεσία SSP χρησιμοποιώντας το NTLM ή Kerberos είναι επίσης αποδεκτές, με την προϋπόθεση ότι ικανοποιείται το ελάχιστο μήκος κλειδιού.

Για αυτήν τη σύνδεση για να είναι δυνατή η χρήση του TLS/SSL:
  • Ο διακομιστής πρέπει να διαθέτει ένα πιστοποιητικό διακομιστή για σύνδεση 128-bit RSA.
  • Ο υπολογιστής-πελάτης πρέπει να εμπιστεύεστε την αρχή έκδοσης πιστοποιητικών (CA) που δημιούργησε το πιστοποιητικό του διακομιστή.
  • Υπολογιστή-πελάτη και διακομιστή πρέπει να είναι ικανό να κρυπτογράφηση 128-bit.


Η σύνταξη του χαρακτηριστικού unicodePwd είναι συμβολοσειρά οκτάδας; Ωστόσο, η υπηρεσία καταλόγου αναμένει ότι τη συμβολοσειρά οκτάδας θα περιέχει μια συμβολοσειρά UNICODE (όπως υποδηλώνει το όνομα του χαρακτηριστικού). Αυτό σημαίνει ότι όλες οι τιμές για αυτό το χαρακτηριστικό διαβιβάστηκε LDAP πρέπει να είναι συμβολοσειρές UNICODE που είναι κωδικοποιημένο BER (Basic Encoding Rules) ως μια συμβολοσειρά οκτάδας. Επιπλέον, η συμβολοσειρά 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;
}