В одной из своих предыдущих статьей я уже рассматривал «потерянные имена входа» (orphaned logins) — имена регистрации, для которых идентификатор безопасности (SID) не согласуется с соответствующей учетной записью пользователя базы данных. Читатели спрашивают меня, существует ли процесс, позволяющий определить еще один аспект сбоев подключения: имена входа, у которых назначенная база данных по умолчанию удалена после создания имени входа. В этой статье мы рассмотрим проблему идентификации таких имен входа, которая не позволяет отправлять запросы в базу данных, независимо от того, является ли она назначенной базой данных по умолчанию.

Вопрос, который мне задал один из читателей, звучал следующим образом: «Могу ли я получить какой-нибудь сценарий, чтобы отыскать потерянные имена входа? Я работаю в тестовой среде, мы создаем одно имя входа для одной базы данных, как требуется, но после удаления баз данных имя входа по-прежнему остается на сервере. Существует ли какой-нибудь сценарий, позволяющий обнаружить имя входа и его удаление?»

Моделирование ситуации отсутствующей базы данных по умолчанию

Может показаться, что вопрос достаточно простой: примените инструкцию SELECT к sys.server_principals для любого имени входа, когда база данных по умолчанию NULL. Однако в действительности он не так прост из-за отсутствия очистки — и ссылки по внешнему ключу — между sys.databases (системное представление для баз данных на экземпляре SQL Server) и sys.server_principals (системное представление для имени входа и ролей уровня сервера в Microsoft SQL Server).

  1. Например, ситуация, описанная в приведенном выше вопросе пользователя: создать имя входа и назначить базу данных по умолчанию.
  2. Добавить учетную запись пользователя к базе данных по умолчанию, чтобы имитировать условия успешного подключения к экземпляру SQL Server.
  3. Удалить базу данных по умолчанию.

Рассмотрим код, приведенный в листинге 1.

Можно предположить, что базой данных по умолчанию для этого пользователя будет NULL. Но в действительности это не так, что показано на экране 1.

 

База данных по умолчанию для имени входа
Экран 1. База данных по умолчанию для имени входа

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

Различия в «болевой шкале» сообщения об ошибках

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

SELECT columnX
FROM database.schema.table;

Из какого приложения или источника пользователи выполняют подключения? В среде SQL Server Management Studio (в силу требований безопасности я не рекомендую ее в качестве источника подключения для конечных пользователей) сообщение об ошибке может ясно указывать пользователю путь к быстрому устранению корневой проблемы (экран 2).

 

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