Partager via


Modification des mots de passe par programme

Avant SQL Server 2005, quand le mot de passe d’un utilisateur a expiré, seul un administrateur peut le réinitialiser. À compter de SQL Server 2005, SQL Server Native Client prend en charge la gestion de l’expiration du mot de passe par programme via le fournisseur OLE DB SQL Server Native Client et le pilote ODBC SQL Server Native Client, ainsi que les modifications apportées aux boîtes de dialogue Connexion SQL Server .

Remarque

Si possible, invitez les utilisateurs à entrer leurs informations d’identification au moment de l’exécution et évitez de stocker leurs informations d’identification dans un format persistant. Si vous devez conserver leurs informations d’identification, vous devez les chiffrer à l’aide de l’API de chiffrement Win32. Pour plus d’informations sur l’utilisation des mots de passe, consultez Mots de passe forts.

Codes d’erreur de connexion SQL Server

Lorsqu’une connexion ne peut pas être établie en raison de problèmes d’authentification, l’un des codes d’erreur SQL Server suivants est disponible pour l’application pour faciliter le diagnostic et la récupération.

Code d’erreur SQL Server Message d'erreur
15113 Échec de la connexion pour l’utilisateur '%.*ls' Motif : échec de la validation du mot de passe. Le compte est verrouillé.
18463 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Impossible d'utiliser le mot de passe pour l'instant.
18464 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Le mot de passe ne répond pas aux exigences de stratégie, car il est trop court.
18465 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Le mot de passe ne répond pas aux exigences de stratégie, car il est trop long.
18466 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Le mot de passe ne répond pas aux exigences de stratégie, car il n’est pas assez complexe.
18467 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Le mot de passe ne répond pas aux exigences de la DLL de filtre de mots de passe.
18468 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Raison : échec de changement de mot de passe. Une erreur inattendue s'est produite lors de la validation de mot de passe.
18487 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Motif : le mot de passe du compte a expiré.
18488 Échec de l'ouverture de session pour l'utilisateur '%.*ls'. Motif : le mot de passe du compte doit être modifié.

Fournisseur OLE DB SQL Server Native Client

Le fournisseur OLE DB SQL Server Native Client prend en charge l’expiration du mot de passe via une interface utilisateur et par programmation.

Expiration du mot de passe de l’interface utilisateur OLE DB

Le fournisseur OLE DB SQL Server Native Client prend en charge l’expiration du mot de passe via les modifications apportées aux boîtes de dialogue Connexion SQL Server . Si la valeur de DBPROP_INIT_PROMPT est définie sur DBPROMPT_NOPROMPT, la tentative de connexion initiale échoue si le mot de passe a expiré.

Si DBPROP_INIT_PROMPT a été défini sur une autre valeur, l’utilisateur voit la boîte de dialogue connexion SQL Server , que le mot de passe ait expiré ou non. L’utilisateur peut cliquer sur le bouton Options et vérifier Modifier le mot de passe pour modifier le mot de passe.

Si l’utilisateur clique sur OK et que le mot de passe a expiré, SQL Server invite l’utilisateur à entrer et à confirmer un nouveau mot de passe à l’aide de la boîte de dialogue Modifier le mot de passe SQL Server .

Comportement de l’invite OLE DB et comptes verrouillés

Les tentatives de connexion peuvent échouer en raison du verrouillage du compte. Si cela se produit après l’affichage de la boîte de dialogue Connexion SQL Server , le message d’erreur du serveur s’affiche à l’utilisateur et la tentative de connexion est abandonnée. Il peut également se produire après l’affichage de la boîte de dialogue Modifier le mot de passe SQL Server si l’utilisateur entre une valeur incorrecte pour l’ancien mot de passe. Dans ce cas, le même message d’erreur s’affiche et la tentative de connexion est abandonnée.

Regroupement de connexions OLE DB, expiration du mot de passe et comptes verrouillés

Un compte peut être verrouillé ou son mot de passe peut expirer pendant que la connexion est toujours active dans un pool de connexions. Le serveur vérifie les mots de passe expirés et les comptes verrouillés à deux reprises. La première est lorsqu’une connexion est créée pour la première fois. La deuxième occasion est lors de la réinitialisation de la connexion, lorsque la connexion est extraite du pool.

Lorsque la tentative de réinitialisation échoue, la connexion est supprimée du pool et une erreur est retournée.

Expiration du mot de passe par programmation OLE DB

Le fournisseur OLE DB SQL Server Native Client prend en charge l’expiration du mot de passe via l’ajout de la propriété SSPROP_AUTH_OLD_PASSWORD (type VT_BSTR) qui a été ajoutée au jeu de propriétés DBPROPSET_SQLSERVERDBINIT.

La propriété « Password » existante fait référence à DBPROP_AUTH_PASSWORD et est utilisée pour stocker le nouveau mot de passe.

Remarque

Dans la chaîne de connexion, la propriété « Old Password » définit SSPROP_AUTH_OLD_PASSWORD, qui est le mot de passe actuel (éventuellement expiré) qui n’est pas disponible via une propriété de chaîne de fournisseur.

Le fournisseur ne conserve pas la valeur de cette propriété. Lorsque cette propriété est définie, le fournisseur n’utilise pas le pool de connexions pour la première connexion, car une nouvelle connexion se produit. Si la modification du mot de passe réussit, la connexion actuelle ne peut pas être réutilisée, car elle contient toujours l’ancien mot de passe, qui ne sera pas valide après la modification du mot de passe. En outre, si la connexion réussit, le fournisseur efface cette propriété. Les tentatives suivantes pour récupérer l’ancien mot de passe retournent VT_EMPTY.

Remarque

SSPROP_AUTH_OLD_PASSWORD ne doit jamais être conservé, car il est utilisé uniquement lorsqu’un mot de passe a expiré.

Notez que chaque fois que la propriété « Old Password » est définie, le fournisseur suppose qu’une tentative de modification du mot de passe est effectuée, sauf si l’authentification Windows est également spécifiée, auquel cas elle est toujours prioritaire.

Si l’authentification Windows est utilisée, la spécification de l’ancien mot de passe entraîne DB_E_ERRORSOCCURRED ou DB_S_ERRORSOCCURRED selon que l’ancien mot de passe a été spécifié comme OBLIGATOIRE ou FACULTATIF respectivement, et que la valeur d’état de DBPROPSTATUS_CONFLICTINGBADVALUE est retournée dans dwStatus. Cela est détecté lorsque IDBInitialize ::Initialize est appelé.

Si une tentative de modification du mot de passe échoue de façon inattendue, le serveur retourne le code d’erreur 18468. Une erreur OLEDB standard est retournée à partir de la tentative de connexion.

Pour plus d’informations sur l’ensemble de propriétés DBPROPSET_SQLSERVERDBINIT, consultez Propriétés d’initialisation et d’autorisation.

Pilote ODBC SQL Server Native Client

Le fournisseur OLE DB SQL Server Native Client prend en charge l’expiration du mot de passe via une interface utilisateur et par programmation.

Expiration du mot de passe de l’interface utilisateur ODBC

Le pilote ODBC SQL Server Native Client prend en charge l’expiration du mot de passe via les modifications apportées aux boîtes de dialogue Connexion SQL Server .

Si SQLDriverConnect est appelé et que la valeur de DriverCompletion est définie sur SQL_DRIVER_NOPROMPT, la tentative de connexion initiale échoue si le mot de passe a expiré. La valeur SQLSTATE 28000 et la valeur de code d’erreur native 18487 sont retournées par les appels suivants à SQLError ou SQLGetDiagRec.

Si DriverCompletion a été défini sur une autre valeur, l’utilisateur voit la boîte de dialogue connexion SQL Server , que le mot de passe ait expiré ou non. L’utilisateur peut cliquer sur le bouton Options et vérifier Modifier le mot de passe pour modifier le mot de passe.

Si l’utilisateur clique sur OK et que le mot de passe a expiré, SQL Server invite à entrer et à confirmer un nouveau mot de passe à l’aide de la boîte de dialogue Modifier le mot de passe SQL Server .

Comportement d’invite ODBC et comptes verrouillés

Les tentatives de connexion peuvent échouer en raison du verrouillage du compte. Si cela se produit après l’affichage de la boîte de dialogue Connexion SQL Server , le message d’erreur du serveur s’affiche à l’utilisateur et la tentative de connexion est abandonnée. Il peut également se produire après l’affichage de la boîte de dialogue Modifier le mot de passe SQL Server si l’utilisateur entre une valeur incorrecte pour l’ancien mot de passe. Dans ce cas, le même message d’erreur s’affiche et la tentative de connexion est abandonnée.

Regroupement de connexions ODBC, expiration du mot de passe et comptes verrouillés

Un compte peut être verrouillé ou son mot de passe peut expirer pendant que la connexion est toujours active dans un pool de connexions. Le serveur vérifie les mots de passe expirés et les comptes verrouillés à deux reprises. La première est lorsqu’une connexion est créée pour la première fois. La deuxième occasion est lors de la réinitialisation de la connexion, lorsque la connexion est extraite du pool.

Lorsque la tentative de réinitialisation échoue, la connexion est supprimée du pool et une erreur est retournée.

Expiration du mot de passe par programmation ODBC

Le pilote ODBC SQL Server Native Client prend en charge l’expiration du mot de passe via l’ajout de l’attribut SQL_COPT_SS_OLDPWD qui est défini avant de se connecter au serveur à l’aide de la fonction SQLSetConnectAttr .

L’attribut SQL_COPT_SS_OLDPWD du handle de connexion fait référence au mot de passe expiré. Il n’existe aucun attribut de chaîne de connexion pour cet attribut, car cela interférerait avec le regroupement de connexions. Si la connexion réussit, le pilote efface cet attribut.

Le pilote ODBC SQL Server Native Client retourne SQL_ERROR dans quatre cas pour cette fonctionnalité : expiration du mot de passe, conflit de stratégie de mot de passe, verrouillage de compte et lorsque l’ancienne propriété de mot de passe est définie lors de l’utilisation de l’authentification Windows. Le pilote retourne les messages d’erreur appropriés à l’utilisateur lorsque SQLGetDiagField est appelé.

Voir aussi

Fonctionnalités de SQL Server Native Client