В последнее время я опубликовал несколько статей о «потерянных пользователях»: учетных записях пользователей, существующих в базах данных SQL Server, но не имеющих связанного имени входа, что мешает связи с потенциальными потребителями данных в этих экземплярах. Исходная статья, в которой подробно рассказано об этом («Потерянные учетные данные»), опубликована в этом же номере журнала. Сегодня я более широко смотрю на факты, о которых необходимо знать администраторам базы данных SQL Server, и подхожу к потерянным именам входа с другой стороны. Меня интересуют ситуации, в которых существуют имена входа с удаленными базами данных по умолчанию (см. статью «Идентификация имен входа при подключении к базе данных по умолчанию в SQL Server», опубликованную в этом номере журнала), что мешает установить подключения.

В этой статье рассматривается еще одна проблема, с которой мне недавно пришлось столкнуться у клиента. Компания перенесла свои экземпляры SQL Server с SQL Server 2012 на SQL Server 2016, однако не завершила перенос имен входа, что привело к неполадкам при подключениях, поскольку у некоторых имен входа отсутствует соответствующая учетная запись пользователя в базе данных по умолчанию. Давайте посмотрим, как такое может произойти и как идентифицировать и исправить ошибку.

Причины ситуации

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

1. Кто-то создал имя входа с базой данных по умолчанию, но впоследствии не создал учетную запись пользователя в базе данных, связанной с именем входа.

2. Вы или другой администратор базы данных перенесли имена входа и базы данных из другого экземпляра или консолидировали из нескольких экземпляров, и, хотя имя входа было создано, база данных по умолчанию не имеет учетной записи пользователя для имени входа. Обычно это приводит к следующему:

  • Отсутствует база данных по умолчанию, соответствующая назначенной для имени входа: назначенная база данных по умолчанию не перенесена. Возникает проблема, описанная в статье об идентификации имен входа, ссылка на которую приведена выше («Идентификация имен входа при подключении к базе данных по умолчанию в SQL Server»).
  • Копия базы данных с таким же именем, как у базы данных по умолчанию, была перенесена или создана с нуля.

3. Учетная запись пользователя была удалена из базы данных, но соответствующее имя входа не удалено.

Создание имени пользователя не приводит автоматически к созданию учетных записей пользователей базы данных. Это два независимых события.

Создание имени входа формирует сущность уровня экземпляра, которая связана с объектом Active Directory (Windows/Trusted Authentication) или с комбинацией имени входа и сохраненного пароля (SQL Server Authentication), как показано в листинге 1.

Процесс создания учетной записи пользователя формирует объект в области базы данных, связанный с именем входа на уровне экземпляра, на основе значения SID (уникальный идентификатор объекта безопасности в масштабе экземпляра в Microsoft SQL Server) (листинг 2).

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

Это не вся статья. Полная версия доступна только подписчикам журнала. Пожалуйста, авторизуйтесь либо оформите подписку.
Купить номер с этой статьей в PDF