Поделиться через


Программное изменение паролей

До истечения срока действия пароля пользователя SQL Server 2005 только администратор может сбросить его. Начиная с SQL Server 2005, sql Server Native Client поддерживает обработку срока действия пароля программным способом с помощью поставщика OLE DB SQL Server Native Client OLE DB и драйвера ODBC собственного клиента SQL Server, а также путем внесения изменений в диалоговые окна входа SQL Server .

Замечание

По возможности предложите пользователям ввести свои учетные данные во время выполнения и избежать хранения учетных данных в сохраняемом формате. Если необходимо сохранить свои учетные данные, их следует зашифровать с помощью API шифрования Win32. Дополнительные сведения об использовании паролей см. в разделе "Надежные пароли".

Коды ошибок входа SQL Server

Если подключение невозможно сделать из-за проблем с проверкой подлинности, один из следующих кодов ошибок SQL Server будет доступен приложению для оказания помощи в диагностике и восстановлении.

Код ошибки SQL Server Сообщение об ошибке
15113 Ошибка входа для пользователя "%.*ls' Причина: сбой проверки пароля. Учетная запись заблокирована.
18463 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. В данный момент этот пароль не может быть использован.
18464 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. Пароль слишком короткий и не отвечает требованиям политики.
18465 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. Пароль не соответствует требованиям политики, так как он слишком длинный.
18466 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. Пароль недостаточно сложный и не отвечает требованиям политики.
18467 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. Пароль не отвечает требованиям динамической библиотеки фильтрации паролей.
18468 Ошибка входа пользователя «%.*ls». Причина: не удалось изменить пароль. В процессе проверки пароля произошла непредвиденная ошибка.
18487 Ошибка входа пользователя «%.*ls». Причина: срок действия пароля учетной записи истек.
18488 Ошибка входа пользователя «%.*ls». Причина: необходимо изменить пароль учетной записи.

Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB собственного клиента SQL Server поддерживает срок действия пароля, хотя пользовательский интерфейс и программно.

Срок действия пароля пользовательского интерфейса OLE DB

Поставщик OLE DB собственного клиента SQL Server поддерживает срок действия пароля с помощью изменений, внесенных в диалоговые окна входа SQL Server . Если для параметра DBPROP_INIT_PROMPT задано значение DBPROMPT_NOPROMPT, первоначальная попытка подключения завершится ошибкой, если срок действия пароля истек.

Если для DBPROP_INIT_PROMPT задано любое другое значение, пользователь видит диалоговое окно входа SQL Server независимо от того, истек срок действия пароля. Пользователь может нажать кнопку "Параметры " и проверить изменение пароля , чтобы изменить пароль.

Если пользователь нажимает кнопку "ОК" и срок действия пароля истек, SQL Server предложит пользователю ввести и подтвердить новый пароль с помощью диалогового окна "Изменить пароль SQL Server ".

Поведение запросов OLE DB и заблокированные учетные записи

Попытки подключения могут завершиться ошибкой из-за блокировки учетной записи. Если это происходит после отображения диалогового окна входа SQL Server , сообщение об ошибке сервера отображается пользователю и попытка подключения прервана. Он также может возникать после отображения диалогового окна "Изменить пароль SQL Server" , если пользователь вводит неправильное значение для старого пароля. В этом случае отображается то же сообщение об ошибке, и попытка подключения прервана.

Пул подключений OLE DB, срок действия пароля и заблокированные учетные записи

Учетная запись может быть заблокирована или его пароль может истекть, пока подключение по-прежнему активно в пуле подключений. Сервер проверяет наличие паролей с истекшим сроком действия и заблокированных учетных записей в двух случаях. Первое — при первом создании подключения. Второй случай возникает при сбросе подключения, когда подключение берется из пула.

При сбое попытки сброса подключение удаляется из пула и возвращается ошибка.

Срок действия программного пароля OLE DB

Поставщик OLE DB собственного клиента SQL Server поддерживает истечение срока действия пароля путем добавления свойства SSPROP_AUTH_OLD_PASSWORD (типа VT_BSTR), добавленного в набор свойств DBPROPSET_SQLSERVERDBINIT.

Существующее свойство Password ссылается на DBPROP_AUTH_PASSWORD и используется для хранения нового пароля.

Замечание

В строке подключения свойство "Старый пароль" задает SSPROP_AUTH_OLD_PASSWORD, что является текущим (возможно истекшим сроком действия) паролем, недоступным через свойство строки поставщика.

Поставщик не сохраняет значение этого свойства. Если это свойство задано, поставщик не использует пул соединений для первого подключения, так как будет происходить новое подключение. Если изменение пароля выполнено успешно, текущее подключение нельзя повторно использовать, так как он по-прежнему содержит старый пароль, который будет недопустимым после изменения пароля. Кроме того, если имя входа выполнено успешно, поставщик очищает это свойство. Последующие попытки получить старый возврат пароля VT_EMPTY.

Замечание

SSPROP_AUTH_OLD_PASSWORD никогда не следует сохранять, так как он используется только при истечении срока действия пароля.

Обратите внимание, что всякий раз, когда задано свойство "Старый пароль", поставщик предполагает, что выполняется попытка изменить пароль, если проверка подлинности Windows также не указана, в этом случае всегда имеет приоритет.

Если используется проверка подлинности Windows, указание старого пароля приводит к DB_E_ERRORSOCCURRED или DB_S_ERRORSOCCURRED в зависимости от того, был ли указан старый пароль как ОБЯЗАТЕЛЬНЫй или НЕОБязательный соответственно, а значение состояния DBPROPSTATUS_CONFLICTINGBADVALUE возвращается в dwStatus. Это обнаруживается при вызове IDBInitialize::Initialize .

Если попытка изменить пароль непредвиденно завершается ошибкой, сервер возвращает код ошибки 18468. Стандартная ошибка OLEDB возвращается из попытки подключения.

Дополнительные сведения о наборе свойств DBPROPSET_SQLSERVERDBINIT см. в разделе "Инициализация" и "Свойства авторизации".

Драйвер ODBC для собственного клиента SQL Server

Поставщик OLE DB собственного клиента SQL Server поддерживает срок действия пароля, хотя пользовательский интерфейс и программно.

Срок действия пароля пользовательского интерфейса ODBC

Драйвер ODBC собственного клиента SQL Server поддерживает истечение срока действия пароля с помощью изменений, внесенных в диалоговые окна входа SQL Server .

Если sqlDriverConnect вызывается и для параметра DriverCompletion задано значение SQL_DRIVER_NOPROMPT, первоначальная попытка подключения завершается ошибкой, если срок действия пароля истек. Значение SQLSTATE 28000 и собственное значение кода ошибки 18487 возвращаются последующими вызовами SQLError или SQLGetDiagRec.

Если driverCompletion имеет любое другое значение, пользователь видит диалоговое окно входа SQL Server независимо от того, истек срок действия пароля. Пользователь может нажать кнопку "Параметры " и проверить изменение пароля , чтобы изменить пароль.

Если пользователь нажимает кнопку "ОК" и срок действия пароля истек, SQL Server запрашивает ввод и подтверждение нового пароля с помощью диалогового окна "Изменение пароля SQL Server ".

Поведение запроса ODBC и заблокированные учетные записи

Попытки подключения могут завершиться ошибкой из-за блокировки учетной записи. Если это происходит после отображения диалогового окна входа SQL Server , сообщение об ошибке сервера отображается пользователю и попытка подключения прервана. Он также может возникать после отображения диалогового окна "Изменить пароль SQL Server" , если пользователь вводит неправильное значение для старого пароля. В этом случае отображается то же сообщение об ошибке, и попытка подключения прервана.

Пул подключений ODBC, срок действия пароля и заблокированные учетные записи

Учетная запись может быть заблокирована или его пароль может истекть, пока подключение по-прежнему активно в пуле подключений. Сервер проверяет наличие паролей с истекшим сроком действия и заблокированных учетных записей в двух случаях. Первое — при первом создании подключения. Второй случай возникает при сбросе подключения, когда подключение берется из пула.

При сбое попытки сброса подключение удаляется из пула и возвращается ошибка.

Срок действия программного пароля ODBC

Драйвер ODBC для собственного клиента SQL Server поддерживает истечение срока действия пароля путем добавления атрибута SQL_COPT_SS_OLDPWD, который устанавливается перед подключением к серверу с помощью функции SQLSetConnectAttr .

Атрибут SQL_COPT_SS_OLDPWD дескриптора подключения ссылается на пароль с истекшим сроком действия. Для этого атрибута строки подключения нет, так как это будет препятствовать пулу подключений. Если имя входа выполнено успешно, драйвер очищает этот атрибут.

Драйвер ODBC собственного клиента SQL Server возвращает SQL_ERROR в четырех случаях для этой функции: срок действия пароля, конфликт политики паролей, блокировка учетной записи и при установке старого свойства пароля при использовании проверки подлинности Windows. Драйвер возвращает пользователю соответствующие сообщения об ошибках при вызове SQLGetDiagField .

См. также

Компоненты собственного клиента SQL Server