Ошибка "login failed for user …": что делать?

Диагностика ошибок аутентификация в SQL Server может оказаться весьма проблематичной (и мы работаем над ее улучшением J) и этому есть несколько причин. Из соображений безопасности мы не хотим возвращать пользователю подробное описание проблемы. Более подробную информацию о причине ошибки можно найти в журнал регистрации ошибок. Например:

Клиент получает сообщение:

Login failed for user 'sa'.

Журнал регистрации ошибок содержит следующую запись:

Error: 18456, Severity: 14, State: 8. Login failed for user 'sa'. Reason: Password did not match that for the login provided. [CLIENT: <local machine>]

Здесь уже имеется дополнительная информация о причине ошибки (неправильный пароль) и о клиентской машине, с которой пытались произвести аутентификацию (либо local mchine либо IP адрес).

Однако некоторые причины могут быть не столь очевидны. Некоторые причины неудачной аутентификации можно определить по статусу (State) ошибки. Ниже приведены возможные значения статуса ошибки 18456 и их расшифровка:

Статус ошибки (State)

Описание

1

Стандартный статус

2 and 5

Недействительный идентификатор пользователя

6

Попытка использования Windows login имени с SQL аутентификацией

7

Login блокирован (disabled)

8

Пароль не совпадает

9

Недействительный пароль

11 and 12

Действительный  login, но отказано в доступе к серверу

13

SQL Server сервис приостановлен

18

Необходима смена пароля

 

- Ошибка со статусом 2 - ошибка Windows аутентификации: удаленный Windows пользователь не может быть проассоциирован с Windows пользователем на сервере; ошибка со статусом 5 - ошибка SQL аутентификации: пользователь с таким именем не найден;

- Аналогично: ошибка со статусом 9 может произойти при Windows аутентификации (в отличии от ошибки со статусом 8 - SQL аутентификация) - например при попытке аутентификации с удаленной машины с другими требованиями к паролю;

- Большинство проблем возникает с диагностикой причин ошибок со статусом 1, 11 или 12. Наиболее частые их причины лежат в конфигурации самой машины и Windows конфигурации: брандмауэр,  Active Directory и т.д. Чтобы понять причину такой ошибки можно воспользоваться внутренним буфером (токая возможность добавлена в SQL Server 2005 SP2), который собирает коды ошибок возвращаемых Win API , и произошедших в процессе аутентификации. Посмотреть содержимое буфера можно с помощью следующей команды:

 

Select * from sys.dm_os_ring_buffers

where ring_buffer_type = 'RING_BUFFER_SECURITY_ERROR'

 

Результат в XML формате содержит имя Win API вернувшей ошибку и код ошибки. Например:

 

<Record id="197" type="RING_BUFFER_SECURITY_ERROR" time="3552445157">

  <Error>

    <SPID>158</SPID>

    <APIName>NetValidatePwdPolicy</APIName>

    <CallingAPIName>CAPIPwdPolicyManager::ValidatePwdForLogin</CallingAPIName>

    <ErrorCode>0x89B</ErrorCode>

  </Error>

</Record>

 

NetValidatePwdPolicy вернула ошибку 89B. Зная API и код ошибки можно найти (в msdn, например) описание ее причины:

 

0x89B = 2203 = The password parameter is invalid.

 

Еще одной распространенной причиной ошибок аутентификации со статусом 12 являются SQL Server Endpoints (конечная точка (?)). Если пользователь не имеет прав на Endpoint, через которую он пытается присоединиться к серверу (а именно: CONNECT ON ENDPOINT), он получит ошибку со статусом 12.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=23570