БД SQL-сервера восстановлена. Ошибка входа в систему - PullRequest
5 голосов
/ 27 января 2009

Я восстановил одну базу данных на моем сервере SQL. У меня есть программа ASP, которая обращается к базе данных. Когда я запускаю это, я получаю сообщение об ошибке входа в систему для этого пользователя. Что именно я должен сделать для этого ??

Ответы [ 9 ]

3 голосов
/ 27 января 2009

База данных Пользователь отличается от SQL Server Имя входа. A Имя входа имеет доступ к серверу и почти во всех случаях также связано с Учетные записи пользователей, имеющие определенные привилегии для одной или нескольких баз данных. В вашем случае произошло то, что пользователь все еще присутствует в базе данных (потому что он был там, когда вы восстановили базу данных), но не существует - как логин - на сервере. То есть, с ними не связан логин, так как логины не восстанавливаются с восстановлением БД.

Когда я перемещаю базу данных на новый сервер, я обычно просто удаляю пользователя из восстановленной базы данных и затем создаю логин. Для этого сначала создайте свой логин на вкладке «Безопасность» на уровне БД . Затем просто используйте страницу «Сопоставление пользователей» в диалоговом окне настроек входа в систему, чтобы автоматически создать связанную учетную запись пользователя в любой базе данных, для которой она подходит. Здесь вы также можете назначить определенные права.

Однако , есть одна загвоздка: вы не сможете удалить пользователя из базы данных. Это происходит, когда пользователь «владеет» схемой или другими объектами в базе данных. В этом случае вам придется либо использовать ссылку Palehorse для получения дальнейших инструкций (я забыл о командах на макушке), либо вам придется сбросить схему / объекты для использования dbo вместо этого.

3 голосов
/ 27 января 2009

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

Вот ссылка на перевод логинов. http://support.microsoft.com/kb/246133

1 голос
/ 28 октября 2012

ОТ http://justgeeks.blogspot.com/2010/02/get-login-failed-for-user-after.html

Когда вы получаете 'Ошибка входа для пользователя' oldUser '. не удалось открыть явно указанную базу данных.

Просто выполните это sp_change_users_login 'Update_One', 'oldUser', 'oldUser' и вуаля! :)

1 голос
/ 07 ноября 2009

Это сработало для меня:

ALTER USER *userName* WITH LOGIN = *loginName*
ALTER USER *userName* WITH DEFALT_SCHEMA = *schemaName*

(замените «UserName» и «LoginName» соответствующими значениями для вашей настройки)

Это то же самое, что sp_change_users_login, я думаю, но упоминание о dox sp_change_users_login будет удалено из будущих версий SQL Server и вместо него будет использоваться ALTER USER

1 голос
/ 27 января 2009

Если это имя входа на основе SQL Server, и вы восстановили базу данных на РАЗЛИЧНОМ SQL Server, чем на том, на котором он был изначально, то ответ Palehorse - это способ передачи имен входа. Если исходный SQL Server недоступен, вы можете создать имя входа SQL Server на новом SQL Server и использовать sp_change_users_login для синхронизации имени входа и пользователя. Books Online рассказывает, как это сделать.

Если для входа использовалась учетная запись домена Windows, а вы изменили SQL-серверы, то вы можете просто добавить имя входа на новый SQL-сервер, и имя пользователя и пользователя будут синхронизированы. SID в SQL Srver для входа в систему на основе Windows происходит из SID учетной записи на уровне сервера или домена.

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

В противном случае, если бы вы могли опубликовать больше информации о том, как вы входите в SQL Server, и точное сообщение об ошибке, это может помочь диагностировать проблему.

0 голосов
/ 06 августа 2015

Я только что закончил работу с этой проблемой в своей среде, и в моем случае проблема заключалась в том, что целевой сервер был настроен только для аутентификации Windows, которую я нашел через журнал ошибок сервера sql.

Проверьте ваш журнал ошибок! Ошибка, которую вы получаете от интерфейса, часто содержит недостаточную информацию для безопасности.

0 голосов
/ 09 мая 2009

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

exec sp_change_users_login @Action='Report'

Затем вы можете переназначить пользователей на логин с помощью:

exec sp_change_users_login @Action='update_one', @UserNamePattern='UserName', @LoginName='LoginName'

(замените «UserName» и «LoginName» соответствующими значениями для вашей настройки).

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

Просмотр ваших ответов на комментарии выше означает, что вы восстановили это с другого сервера. При этом, как сказал bnkdev, проверьте строку подключения. Скорее всего, у вас либо неправильная комбинация ИД пользователя / пароля и / или неправильное имя экземпляра ... при условии, что они назывались по-разному для каждого сервера.

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

Проверьте строку подключения . (если это ASP.NET, то web.config должен иметь это). Убедитесь, что логин (имя пользователя / идентификатор пользователя) существует на сервере SQL и имеет соответствующие разрешения для указанной базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...