Устранение проблем, связанных с разрешениями, при перемещении базы данных на другой сервер Microsoft SQL Server

Переводы статьи Переводы статьи
Код статьи: 240872
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описан процесс сопоставления стандартных и объединенных учетных записей для устранения проблем, связанных с разрешениями, при перемещении базы данных на другой сервер Microsoft SQL Server.

Дополнительная информация

При перемещении базы данных на другой сервер SQL Server возможно возникновение несоответствий идентификаторов безопасности (SID) учетных записей в базе данных master и пользователей в базе данных user. По умолчанию для сопоставления несогласованных пользователей в SQL Server 7.0, SQL Server 2000 и SQL Server 2005 используется системная хранимая процедура sp_change_users_login. Однако процедура sp_change_users_login предназначена для сопоставления только стандартных учетных записей SQL Server и должна выполняться отдельно для каждого пользователя. Для получения дополнительных сведений о хранимой процедуре sp_change_users_login см. раздел «sp_change_users_login» интерактивных книг по SQL Server 7.0, SQL Server 2000 и SQL Server 2005.

В SQL Server версии 7.0 и более поздних для поддержки сопоставления учетных записей в базе данных master пользователям в базе данных user можно использовать идентификаторы безопасности (SID). Такое сопоставление необходимо для хранения правильных разрешений для учетных записей в базе данных user. В случае утраты сопоставления возможно появление описанных ниже и других проблем с разрешениями.
  • Если на новом сервере SQL Server учетной записи не существует и пользователь пытается войти в систему, он может получить следующее сообщение об ошибке:
    Server: Msg 18456, Level 16, State 1
    Login failed for user '%ls'.
  • Если на новом сервере существует учетная запись SQL Server, но идентификатор безопасности базы данных master отличается от идентификатора безопасности базы данных user, пользователь может успешно войти в систему SQL Server; однако при попытке доступа к базе данных он может получить следующее сообщение об ошибке:
    Server: Msg 916, Level 14, State 1, Line1
    Server user '%.*ls' is not a valid user in database '%.*ls'.
    Примечание. В SQL Server 2005 пользователь может получить следующее сообщение об ошибке:

    Server user '%s' is not a valid user in database '%s'. Add the user account into the database first.
Для получения дополнительных сведений о модели безопасности SQL Server 2000 см. официальный документ «Microsoft SQL Server 7.0 Security». Чтобы ознакомиться с этим документом, посетите следующий веб-узел корпорации Майкрософт:
http://msdn2.microsoft.com/en-us/library/Aa226173(SQL.70).aspx
Для получения дополнительных сведений о модели безопасности SQL Server 2000 щелкните следующий номер статьи базы знаний Майкрософт:
322712 Microsoft SQL Server 2000 S322712 Security Features and Best Practices (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Ограничения

  • Если в таблице sysusers отсутствуют пользователи с префиксом имени компьютера или имени домена, которому принадлежат объекты, и ссылки на эти объекты в приложениях указываются с помощью имени из двух частей username.objectname, возможен сбой приложения, поскольку хранимая процедура sp_sidmap переименовывает таких пользователей, добавляя префикс имени компьютера или домена в соответствии с данными таблицы sysxlogins. Для обхода этой проблемы после завершения процедуры sp_sidmap верните соответствующим пользователям из таблицы sysusers прежние имена или обратитесь к компании, которая осуществляет техническую поддержку.
  • В статье не рассматриваются псевдонимы. Управление псевдонимами необходимо осуществлять вручную.
  • Если на новом сервере SQL Server стандартная учетная запись SQL Server не существует, ее можно добавить с паролем NULL. Пароли таких учетных записей может понадобиться изменить соответствующим образом.
  • Если пользователь создается в базе данных user под именем, которое отличается от имени в таблице sysxlogins, определить соответствующую учетную запись для такого пользователя невозможно. Поэтому перед запуском хранимой процедуры sp_sidmap необходимо выполнить следующие действия.
    1. Переместите все объекты, которыми владеет пользователь, во временную базу данных.
    2. Удалите пользователя, затем добавьте его и верните все объекты для данного пользователя.
  • Если пользователь не имеет ни соответствующей учетной записи, ни префикса имени домена или локального компьютера, появится сообщение о том, что вначале необходимо добавить пользователя на уровне Windows, а затем (в качестве учетной записи) — в SQL Server. После этого запустите хранимую процедуру sp_sidmap повторно.
  • Если пользователь имеет префикс имени домена или локального сервера Windows, но в таблице sysxlogins отсутствует соответствующая учетная запись, хранимая процедура сделает попытку добавить ее на сервер SQL Server в качестве новой учетной записи. Если пользователь Windows не существует, появится сообщение, и после добавления пользователя Windows будет создана учетная запись.
  • Если в таблице sysusers пользователю назначено несколько учетных записей, в файл результатов будет записано сообщение, которое содержит перечень учетных записей с одинаковым именем пользователя. На этом этапе необходимо вмешаться вручную, чтобы гарантировать, что пользователь сопоставлен только одной учетной записи.

    Пример Если в таблице sysusers имеется пользователь johndoe, а таблица sysxlogins содержит учетные записи Test\johndoe и Test2\johndoe, при запуске хранимой процедуры появится сообщение о том, что одному из пользователей назначено несколько учетных записей и системный администратор должен выбрать одну из них. Это единственный случай, когда необходимо запустить вторую хранимую процедуру sp_prefix_sysusersname (содержится в данной статье). Кроме того, эта ситуация подробно описана в файле Readme.txt.

Сопоставление стандартных и объединенных учетных записей

После перемещения базы данных на другой сервер SQL Server выполните следующие действия, чтобы свести к минимуму вмешательство вручную.
  1. Убедитесь, что в таблице sysxlogins базы данных master имеется учетная запись для каждого пользователя в таблице sysusers.

    Примечание. Для добавления стандартных учетных записей SQL Server см. раздел «sp_addlogin» интерактивных книг по SQL Server. Для добавления объединенных учетных записей SQL Server см. раздел «sp_grantlogin» интерактивных книг по SQL Server.
  2. Загрузите файл MapSids.exe и извлеките файлы Sp_sidmap.sql и Readme.txt.
  3. Войдите на сервер SQL Server с правами системного администратора и запустите файл Sp_sidmap.sql в базе данных user. Будут созданы хранимые процедуры sp_sidmap и sp_prefix_sysusersname.
  4. Убедитесь, что с базой данных работает только пользователь, который запускает хранимые процедуры.
  5. Убедитесь, что анализатор запросов отображает результаты в текстовом формате, а не в виде сетки. Для этого необходимо нажать сочетание клавиш CTRL + T или выбрать команду Query, а затем — Results in Text. Это необходимо для создания возможности просмотра результатов и информационных сообщений в одном окне и сохранения их в текстовом файле. Впоследствии такой файл может быть использован для разрешения некоторых сопоставлений.
  6. Будьте внимательны, передавая параметры хранимой процедуре sp_sidmap, так как проверить правильность этой передачи невозможно:
    EXEC sp_SidMap @old_domain = old_domain_name,
    @new_domain = new_domain_name,
    @old_server = old_server_name,
    @new_server = new_server_name
    Замените значения староых и новых имен доменов и имен серверов соответственно.
  7. Сохраните полученный результат в файле и следуйте указаниям, которые предоставлены в файле Readme.txt.

    Примечание. В процессе выполнения этих хранимых процедур изменения вносятся только в таблицу sysusers. Для возврата в исходное состояние необходимо повторно подключить или с помощью резервной копии восстановить базу данных.

Ссылки

Для получения дополнительных сведений щелкните следующие номера статей базы знаний Майкрософт.
274188 Раздел "Troubleshooting orphaned users" интерактивных книг не полон (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
246133 Перемещение имен пользователей и паролей между экземплярами SQL Server
168001 После восстановления дампа не удается войти на сервер или нарушаются права доступа (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
298897 Образец: Mapsids.exe помогает сопоставить идентификаторы безопасности главной базы данны и базы данных пользователя при перемещении базы данных (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Свойства

Код статьи: 240872 - Последний отзыв: 15 февраля 2011 г. - Revision: 7.4
Ключевые слова: 
kbsqlmanagementtools kbhowtomaster KB240872

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com