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), выполните следующие действия:
Откройте SQL Server Management Studio (SSMS).
В обозреватель объектов выберите "Подключиться> ядро СУБД".
Заполните диалоговое окно "Подключение к серверу ".
Выберите Параметры.
В разделе "Свойства подключения" измените значение подключения к базе данных с помощью одного из следующих параметров:
Если имя входа является членом роли 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
Подключитесь к экземпляру SQL Server с помощью SQL Server Management Studio (SSMS).
Выберите "Имена входа безопасности>", чтобы найти пользователя и изменить базу данных пользователя по умолчанию на другую, которая в настоящее время доступна на странице "Общие" свойств входа в SSMS. Дополнительные сведения см. в разделе Создание имени входа.
После подключения к экземпляру 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 >]