Перемещение логинов с одного экземпляра SQL Server на другой
В SQL Server, да и в любой другой СУБД существует понятие пользователь базы данных – users, и логин сервера – logins. Логин служит точкой входа пользователя базы, он (логин) создается на уровне SQL Serevr, а пользователи на уровне базы данных.
При миграции базы (backup-restore) с одного сервера на другой переноситься все данные база – таблицы, вьюхи, процедуры, тригеры, пользователи…вообщем все.., НО как говориться “все да не все”. Нужно “правильно” создать логины на уровне сервера и привязать их к пользователям, только после этого пользователи могут подключаться к серверу. Долой теорию – перейдем к практике
--Выведем скриптом все логины сервера (включая логины Windows)
USE master
SELECT * FROM syslogins
SELECT loginname, sid, password FROM syslogins
--Выведем только sql логины на сервере
SELECT * FROM master.sys.sql_logins
SELECT name, sid, password_hash FROM master.sys.sql_logins
Что касается пользователей базы данных то их можно посмотреть скриптом
USE test
SELECT * FROM sysusers
SELECT name, sid FROM sysusers
Так вот при переносе базы нужно создать логины на сервере с таким же sid как и у пользователя, только в этом случае не нарушиться связка логин-пользователь. Это можно реализовать многими способами:
Первый способ предлагает сам Microsoft, он создает хранимую процедуру sp_help_revlogin, которая выводит скрипт по созданию всех логинов на сервере, и потом этот скрипт запускаем на новом екземпляре SQL Server где была развернута база.
Второй способ принудительная привязка логинов к пользователям.
Сначала мы создаем логины на уровне сервера
CREATE LOGIN [test] WITH PASSWORD=N'test', DEFAULT_DATABASE=[dbtest], DEFAULT_LANGUAGE=[us_english]
GO
а потом смотрим “зависших” (у которых sid пользователя отличается от sid логина) пользователей скриптом
USE dbtest
EXEC sp_change_users_login
@Action='REPORT'
GO
далее привязываем sid пользователя к sid логина скриптом
USE dbtest
EXEC sp_change_users_login
@Action='update_one'
, @UserNamePattern='test'
, @LoginName='test';
GO
После выполнения выше написанных сценариев все пользователи и логины будут корректно перенесены с одного экземпляра SQL Server на другой.
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |