Вход пользователей в систему и разрешений в базе данных могут оказаться неверными после восстановления базы данных


Симптомы


Если дамп пользовательской базы данных SQL Server, восстанавливается различных SQL Server (например, горячего резервного сервера) или же SQL Server после перестроения или обновление старой версии базы данных master, вход пользователей в систему и разрешений в базе данных может быть неправильным.

Эта проблема может открыться сам несколькими способами:
  • При регистрации на сервере 6.x, пользователи могут получать следующее сообщение об ошибке:
    Msg 4002, уровень 14, состояние 1, сервер Microsoft SQL Server, строки 0
    Ошибка входа
    DB-Library: Неверный вход.
  • При входе в сервер 7.0, пользователи могут получать следующее сообщение об ошибке:
    Сообщение об ошибке 18456, уровень 14, состояние 1,
    Ошибка входа пользователя «%ls».
  • При попытке получить доступ к объектам в базе данных, пользователи могут получать следующее сообщение об ошибке:
    Сообщение 229, уровень 14, состояние 1
    Отказано в %s для объекта %. * s, базы данных %. * s, владелец %.*s
  • При попытке создать имя входа и предоставить доступ к восстановленной базе данных или добавить пользователя в базу данных, может быть получено следующее сообщение об ошибке:
    Microsoft SQL-DMO (ODBC SQLState: 42000) Ошибка 15023: пользователь или роль «%s» уже существует в текущей базе данных.
  • Пользователи могут иметь разрешения на объекты, для которых они ранее не.

Причина


Учетные данные пользователя хранятся в таблице syslogins базы данных master. Изменение серверов или изменение этой информации путем перестройки или восстановление старой версии базы данных master информация может отличаться от создания дампа базы данных пользователя. Если вход в систему для пользователей, не существуют, они получат сообщение об ошибке, указывающее, «Сбой входа» при попытке войти сервер. Если вход пользователя существует, но SUID значения (6.x) или SID значения (7.0) в основной. отличаются syslogins и в таблице sysusers в пользовательской базе данных, пользователи могут иметь различные разрешения, чем ожидалось в базе данных пользователей.

Примечание. При использовании Microsoft SQL Server 2005 в таблице syslogins и таблицы sysusers реализованы как представления совместимости. Эти представления являются sys.syslogins и sys.sysusers. Дополнительные сведения о представлениях совместимости приведены в разделе «Представления совместимости (Transact-SQL)» в электронной документации по SQL Server 2005.

Временное решение


Чтобы обойти эту проблему, выполните одно из следующих:
  • Если текущие сценарии доступны для добавления входа, пользователей и разрешения, удалите и заново создайте из сценариев. Примеры использования сценариев для передачи имен входа между серверами, обратитесь к следующей статье Microsoft Knowledge Base:
    246133 как: перемещение имен пользователей и паролей между экземплярами SQL Server

    Как 240872 для устранения проблем с разрешениями, при перемещении базы данных между серверами SQL
  • Процедура sp_change_users_login хранятся измените связи отношения между таблицами syslogins, sysusers и sysalternates. Тем не менее процедура дает наиболее точные предварительные оценки связей и разрешить пользователю дополнительные права доступа, чем планировалось. Запуск процедуры с параметром отчета сначала создает список пользователей, которые будут изменены. После этого следует проверить обеспечить соответствующие разрешения для соответствующих пользователей. Кроме того Имейте в виду, что процедура sp_change_users_login устранить неполадки разрешения производным от входа и пользователей, созданных в другом порядке в базе данных где восстановления.
  • Восстановите дамп базы данных master из времени пользовательского дампа базы данных на сервере перед загрузкой базы данных пользователей. Это обеспечивает все сведения о пользователе в базе данных пользователей соответствие правильно с таблице syslogins главной.


    Предупреждение: база данных master содержит сведения на уровне сервера и влияет на все базы данных на сервере. Восстановление базы данных master, могут возникнуть дополнительные пользовательские идентификаторы и баз данных, которые были утеряны или имеют неправильные разрешения. Любые изменения в образец, произошедшие с момента резервного копирования, будут потеряны. Этот метод следует используйте только если вы уверены, что резервную копию базы данных master содержит точные сведения для пользователя базы данных и всех баз данных на сервере.
  • Для копирования учетных записей можно используйте Transfer Manager (для 6.x) или DTS (для 7.0). Имейте в виду, что пароли не переносятся с помощью этого метода.
  • Обратитесь к основному поставщику технической поддержки.