Невозможно открыть пользовательскую базу данных по умолчанию. Ошибка входа. SQL 2005 - PullRequest
1 голос
/ 07 октября 2008

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

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

Возможно, это был коррумпированный пользователь от SQL 2000 на работе до 2005 года дома

Ответы [ 9 ]

3 голосов
/ 07 октября 2008

РЕДАКТИРОВАТЬ: Шахта была с 2005 по 2005 год. Не уверен, что это будет работать для вашего случая ...

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

В моем случае я смог войти, удалив пользователя из базы данных -> безопасность -> пользователей, а не пользователя, который находится в списке пользователей корневого сервера sql.

Затем перейдите в список пользователей root и переназначьте сопоставление базы данных или создайте пользователя, если он не существует.

Надеюсь, это поможет.

2 голосов
/ 02 августа 2011

У меня была такая же проблема, и я исправил ее с помощью:

C:\> sqlcmd -E -d master
1> ALTER LOGIN ***** WITH DEFAULT_DATABASE=master
2> GO

Где ***** - ваше имя пользователя.

(Если вы используете имя пользователя домена: [*****])

Edit:

Где ***** может быть:

  • username если пользователь локальный
  • [username], если пользователь принадлежит фактическому домену
  • [domain\username], если пользователь принадлежит другому домену (не проверено)
2 голосов
/ 07 октября 2008

Это выстрел в темноте, так что прости меня, если это просто зря тратит время.

Другой автор упомянул, что у данного пользователя есть идентификатор для системы и идентификатор для любой данной базы данных. В этом можно убедиться, сравнив sid между master.sys.syslogins и dbname.sys.users для одного и того же имени входа / пользователя. Если вы восстановите резервную копию с другого сервера sql, который имеет собственную копию баз данных master, sids не будет совпадать.

Sql Server 2005 не позволяет напрямую редактировать системные таблицы без особых проблем. Чтобы помочь с этими несоответствиями, они добавили хранимую процедуру, чтобы помочь вам исправить их:

USE dbName GO

sp_change_users_login @ Action = 'Report'

Это покажет вам, какие пользователи имеют запись dbName.sys.users, но нет master.sys.syslogins - или где имя существует в обоих, но отличается по sids.

Если он показывает, что ваш пользователь не синхронизирован, процедура также имеет режим для изменения связи:

USE dbName ИДТИ sp_change_users_login 'Update_One', 'userNameInDbUsers', 'UserNameInLogins'

Если несоответствие sid не является вашей проблемой, я также видел очень странные вещи с Sql Server 2005. Графический интерфейс особенно глючит. Чтобы решить проблему, подобную этой, мне пришлось фактически удалить запись syslogins (с помощью команды gui или DROP LOGIN)

sp_change_users_login: http://msdn.microsoft.com/en-us/library/ms174378(SQL.90).aspx

Удалить синтаксис логина: http://msdn.microsoft.com/en-us/library/ms188012(SQL.90).aspx

1 голос
/ 12 апреля 2011

Я только что решил эту проблему. Моя база данных по умолчанию была AdventureWorks2008, поэтому, как администратор, я в итоге удалил свой логин с сервера. Затем выполните следующую команду, чтобы воссоздать моего пользователя

CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english]
GO
1 голос
/ 07 октября 2008

Я переместил 8 баз данных с SQL Server 2000 на SQL Server 2005 и на совершенно другой компьютер. Я обычно хотел бы знать, что делают хранимые прокы, поэтому я выкопал немного и обнаружил, что фактическая команда ALTER USER .

Это то, что говорили все остальные. Пользователи разъединяются, когда вы отсоединяете и повторно подключаете базы данных в SQL Server 2005. Я считаю, что это поведение наиболее раздражает, поскольку я не видел такого поведения в SQL Server 2000.

T-SQL для решения этой проблемы выглядит следующим образом:

USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO

В этой статье MSDN немного больше говорится об этом:

http://msdn.microsoft.com/en-us/library/ms176060.aspx

0 голосов
/ 09 января 2009

ALTER LOGIN работает только в SQL 2005 и выше.

Чтобы изменить базу данных по умолчанию для пользователя в 2000 году, используйте

EXEC master.dbo.sp_defaultdb @loginname = N'BuiltIn\Administrators', @defdb = N'master'

Я нашел это нелегко, когда установил для учетной записи встроенной \ администраторов значение по умолчанию для базы данных приложения, и она как-то перешла в автономный режим, и я больше не мог войти. Используя Management Studio, вы можете установить опцию входа в систему в качестве master, но вы должны выполнить приведенную выше команду, прежде чем любая другая операция будет работать, за исключением того, что вы получаете базу данных по умолчанию, недоступную ошибку.

0 голосов
/ 07 октября 2008

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

Если это был резервный набор, и вы его восстанавливаете, то, однако, нет никакого способа (о котором я знаю) повторно связать имя пользователя с помощью пользовательского интерфейса управления. Вместо этого вы должны использовать:

exec sp_change_users_login update_one, 'user', 'login'

чтобы восстановить ссылку.

0 голосов
/ 07 октября 2008

Насколько я понимаю, логины хранятся на сервере, тогда как пользователь назначает логин базе данных (поправьте меня, если я ошибаюсь).

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

...