MSSQLSERVER_4064

Применимо к:SQL Server

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 4064
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя DB_UFAIL_FATAL
Текст сообщения Невозможно открыть пользовательскую базу данных по умолчанию. Ошибка входа.

Описание

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

Проблемы с разрешениями могут быть одним или несколькими из следующих:

  • Имя входа не имеет соответствующего сопоставленного пользователя в базе данных по умолчанию.
  • Вы назначили базу данных по умолчанию для входа, но не создали сопоставление пользователей в указанной базе данных.
  • Сопоставленный пользователь для имени входа был отказано в доступе. (Например, это может произойти, если пользователь непреднамеренно добавляется в предопределенную роль базы данных db_denydatareader .)

База данных по умолчанию может быть недоступна во время подключения по следующим причинам:

  • База данных по умолчанию находится в режиме подозрения.
  • База данных по умолчанию больше не существует.
  • Имя базы данных по умолчанию неправильно.
  • База данных по умолчанию находится в однопользовательском режиме, и единственное доступное подключение уже используется кем-то или другим.
  • База данных по умолчанию отключена.
  • База данных по умолчанию имеет состояние RESTRICTED_USER.
  • База данных по умолчанию находится в автономном режиме.
  • Для базы данных по умолчанию задано состояние ЭКСТРЕННОГО РЕАГИРОВАНИЯ.
  • База данных по умолчанию является частью зеркало базы данных.

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

Дополнительные сведения о пользователях базы данных в SQL Server см. в разделе "Создание пользователя базы данных".

Действие пользователя

Вы можете выполнить одно из следующих действий:

Обход проблемы

Если вам не нужно получить доступ к текущей настроенной базе данных по умолчанию и вам просто нужно подключиться к экземпляру SQL Server для других операций с помощью SQL Server Management Studio (SSMS), выполните следующие действия:

  1. Откройте SQL Server Management Studio (SSMS).

  2. В обозреватель объектов выберите Подключение> ядро СУБД.

  3. Заполните диалоговое окно Подключение на сервер.

  4. Выберите Параметры.

  5. В разделе "Свойства Подключение ion" измените значение Подключение на значение базы данных с помощью одного из следующих параметров:

    • Если имя входа является членом роли sysadmin, введите masterи выберите Подключение, чтобы установить подключение к SQL Server. После успешного подключения к SQL Server можно изменить базу данных по умолчанию на другую, которая в настоящее время доступна на странице "Общие " свойств входа в SSMS. Дополнительные сведения см. в разделе Создание имени входа.

    • Если имя входа не является членом роли sysadmin, введите имя базы данных на сервере, к которому у вас есть доступ. Кроме того, можно попробовать ввести имя системной базы данных, напримерmaster, а затем выбрать Подключение. Этот шаг может не работать, если системный администратор явно отказался от разрешений гостевого master пользователя в базе данных. В этом сценарии необходимо работать с системным администратором, чтобы устранить проблему.

Устранение проблемы

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

SELECT name, default_database_name
FROM sys.server_principals
WHERE type = 'S' AND name = '<sql-login>';

Используйте следующую таблицу, чтобы определить соответствующее действие для устранения проблемы для связанных причин:

Причина Решение
В базе данных по умолчанию для входа не существует сопоставления пользователей или пользователь был отказано в доступе. Эти пользователи базы данных также называются потерянными пользователями. Эта проблема обычно возникает при перемещении баз данных между двумя экземплярами сервера и является одной из распространенных причин ошибки 4064. Сведения об обнаружении потерянных пользователей и устранении этой проблемы см. в статье "Устранение неполадок потерянных пользователей (SQL Server)".
Для входа не существует пользователя базы данных Создайте пользователя базы данных и назначьте соответствующие разрешения для доступа к базе данных.
Учетные записи пользователя базы данных запрещены разрешения на доступ к базе данных Перейдите к свойствам пользователя в базе данных (разверните пользователей системы безопасности>узла> базы данных) и проверка, если пользователь является частьюdb_denydatareader роли на странице членства. Вы также можете проверка действующие разрешения пользователя с помощью sys.fn_my_permissions.
База данных по умолчанию находится в режиме подозрения. База данных может перейти в состояние SUSPECT по нескольким причинам. Возможные причины включают отказ в доступе к ресурсу базы данных операционной системой и недоступность или повреждение одного или нескольких файлов базы данных. Вы можете проверка состояние базы данных с помощью этого запроса: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; В SSMS состояние подозрительных баз данных отображается как (ожидание восстановления). Чтобы устранить эту ситуацию, может потребоваться восстановить базу данных из резервной копии.
Неправильное имя базы данных в строка подключения При попытке подключиться к базе данных, которая не существует, может появиться следующее сообщение об ошибке:
Cannot open database "AdventureWorks" requested by the login. The login failed.
Система управления базами данных (СУБД) также может отобразить сообщение об ошибке Login failed for user CONTOSO\user1 . Дополнительные сведения см. в MSSQLSERVER_18456.
В журнале ошибок SQL Server появится следующее сообщение:
"Ошибка входа для пользователя Contoso\User1. Причина: не удалось открыть явно указанную базу данных AdventureWorks".
Чтобы устранить эту ошибку, убедитесь, что имя базы данных совпадает как в сообщении об ошибке, так и в записи журнала ошибок. Измените строка подключения, если это неправильно, или предоставьте пользователю необходимые разрешения.
База данных по умолчанию больше не существует. Если вы намеренно удалили базу данных с сервера, измените базу данных по умолчанию для входа на другую существующую базу данных на сервере с помощью SSMS или инструкции ALTER LOGIN (Transact-SQL). Кроме того, может потребоваться проверка, если на сервере установлены другие имена входа, для которой задана база данных по умолчанию для этой не существующей базы данных с помощью этого запроса: SELECT name AS Login_Name FROM sys.server_principals where default_database_name = '<removed-dbname>';
База данных по умолчанию находится в однопользовательском режиме, а единственное подключение используется администратором или другим пользователем. Если для целей обслуживания для базы данных задан режим с одним пользователем, его следует вернуть в режим с несколькими пользователями после завершения действия обслуживания, используя следующий запрос: ALTER DATABASE <dbname> SET MULTI_USER;
Дополнительные сведения см. в разделе "Настройка базы данных в однопользовательском режиме".
Примечание. Чтобы проверка, если база данных находится в однопользовательском режиме, можно использовать следующий запрос: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';
Если вам по-прежнему нужно ограничить доступ к базе данных, но хотите включить подключение к затронутым именам входа, измените базу данных по умолчанию на другую базу данных на сервере.
База данных по умолчанию отключена. Отключение базы данных удаляет ее из экземпляра SQL Server и больше не доступно. Чтобы сделать его доступным для входа, подключите базу данных с помощью SSMS или sp_attach_db хранимой процедуры. Дополнительные сведения см. в разделе "Отсоединение базы данных" и "Подключение" (SQL Server).
Для базы данных по умолчанию задано состояние RESTRICTED_USER. Если для базы данных задано состояние RESTRICTED_USER, только члены предопределенных ролей базы данных db_owner, а также предопределенных ролей сервера dbcreator и sysadmin могут подключаться к базе данных. Если вам больше не нужно ограничивать доступ к соответствующей базе данных, задайте для базы данных многопользовательский режим, используя следующий запрос: ALTER DATABASE <dbname> SET MULTI_USER;
Примечание. Чтобы проверка, если база данных находится в состоянии ограниченного пользователя, можно использовать следующий запрос: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';
Если вам по-прежнему нужно ограничить доступ к базе данных, но хотите включить подключение к затронутым именам входа, измените базу данных по умолчанию на другую базу данных на сервере.
База данных по умолчанию находится в автономном режиме. Невозможно изменить базу данных, которая находится в автономном состоянии. Вы можете перевести базу данных в режим "в сети", используя следующий запрос: ALTER database <dnname> SET ONLINE;
Вы можете проверка, если база данных отключена с помощью SSMS или с помощью этого запроса: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';
Дополнительные сведения см. в разделе "Состояния базы данных" и параметры ALTER DATABASE SET (Transact-SQL) — SQL Server.
Если необходимо сохранить базу данных в автономном состоянии, но хотите включить подключение к затронутым именам входа, измените базу данных по умолчанию на другую базу данных на сервере.
Для базы данных по умолчанию задано состояние ЭКСТРЕННОГО РЕАГИРОВАНИЯ. Возможно, база данных была помещена в состояние аварийного реагирования для устранения неполадок системным администратором. Только пользователи роли sysadmin могут получить доступ к базам данных, заданным для состояния ЧРЕЗВЫЧАЙНОЙ СИТУАЦИи. Вы можете перевести базу данных в режим "в сети", используя следующий запрос: ALTER database <dnname> SET ONLINE;
Можно проверка, если база данных находится в состоянии аварийного реагирования с помощью SSMS или этого запроса: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';
Дополнительные сведения см. в разделе "Состояния базы данных" и параметры ALTER DATABASE SET (Transact-SQL).
Если вам по-прежнему нужно сохранить базу данных в состоянии АВАРИЙНОго реагирования, но хотите включить подключение к затронутым именам входа, измените базу данных по умолчанию на другую базу данных на сервере.
База данных по умолчанию является частью зеркало базы данных. Вы не можете подключиться к базе данных зеркало на сервере зеркало, и это поведение выполняется путем разработки. Чтобы проверка, если база данных находится в зеркало роли, используйте этот запросSELECT DB_NAME(database_id) as database_name, mirroring_role_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = '<dbname>';. Дополнительные сведения о зеркало базах данных см. в разделе "Зеркальное отображение базы данных" (SQL Server).
Учетная запись входа может быть членом нескольких групп, а база данных по умолчанию для одной из групп недоступна во время подключения. Чтобы перечислить группы с указанным пользователем с помощью PowerShell, см. статью Get-ADPrincipalGroupMembership (ActiveDirectory).

Изменение базы данных по умолчанию для данного пользователя

Чтобы внести изменения в базу данных пользователя по умолчанию, необходимо иметь разрешение ALTER ANY LOGIN. Если измененное имя входа является членом предопределенных ролей сервера sysadmin или участника разрешения CONTROL SERVER, при внесении следующих изменений также требуется разрешение CONTROL SERVER. Члены роли sysadmin имеют эти разрешения по умолчанию. Дополнительные сведения см. в разделе ALTER LOGIN (Transact-SQL).

Изменение базы данных по умолчанию с помощью SSMS

  1. Подключение экземпляр SQL Server с помощью SQL Server Management Studio (SSMS).

  2. Выберите "Имена входа безопасности>", чтобы найти пользователя и изменить базу данных пользователя по умолчанию на другую, которая в настоящее время доступна на странице "Общие" свойств входа в SSMS. Дополнительные сведения см. в разделе Создание имени входа.

  3. После подключения к экземпляру SQL Server можно выполнить инструкцию ALTER LOGIN , как показано в следующих примерах:

    ALTER LOGIN <LoginName> WITH DEFAULT_DATABASE = <AvailableDatabaseName>;

    <AvailableDatabaseName> — это заполнитель для имени существующей базы данных, к которым можно получить доступ с помощью имени входа SQL Server в экземпляре. <LoginName> — заполнитель для входа SQL Server с необходимыми ALTER LOGIN разрешениями.

    Например:

    ALTER LOGIN [SQLLogin] WITH DEFAULT_DATABASE = master;
    ALTER LOGIN [Constoso\Windowslogin] WITH DEFAULT_DATABASE = [AdventureWorks];
    

Ошибка 18456 отображается вместе с ошибкой 4064

При использовании таких приложений, как SSMS, которые получают ошибку 4064, отображаемой пользователю, в журнал ошибок SQL Server регистрируется следующее сообщение. Такое поведение предусмотрено программой. Исправление базы данных по умолчанию для неудачного входа с помощью процедур, описанных в этой статье, автоматически устраняет ошибку 18456.

2023-02-06 18:17:02.56 Logon       Error: 18456, Severity: 14, State: 40.
2023-02-06 18:17:02.56 Logon       Login failed for user '<user name>. Reason: Failed to open the database '<db_name>' specified in the login properties. [CLIENT: <hostname >]