Bardzo często zdarza się, że przenosimy bazę danych na inną instancję serwera czy też na inny fizyczny serwer.

Mamy już założone loginy lub te loginy zakładamy. Po przeniesieniu bazy i po jej odtworzeniu posiadamy te same nazwy userów ale z innymi wartościami sid tzn. inny jest sid zapisany w tabeli sysusers należącej do przenoszonej bazy danych oraz inny jest sid zapisany w tabeli sysxlogins bazy systemowej master.

Należy podmienić sidy w tabeli wybranej bazy danych sysusers sidami z tabeli sysxlogins bazy master w ramach tej samej nazwy loginu i usera.

Poniżej przedstawiony kod działa wyłącznie na wersji MS SQL Server 2000.

Use master
GO

sp_configure @configname = 'allow updates'
, @configvalue = '1';
RECONFIGURE WITH OVERRIDE
GO

UPDATE su
SET su.sid = sl.sid
FROM [nazwabazydanych]..sysusers AS su
JOIN master..sysxlogins AS sl ON su.[name] like sl.[name]
WHERE su.[name] = 'nazwausera'
GO

sp_configure @configname = 'allow updates'
, @configvalue = '0'

RECONFIGURE WITH OVERRIDE
GO

Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl

2 komentarze

roku · 11 września 2010 o 12:46

dla jednego usera i w przypadku gdy login jest inny niz user lepiej,
sql <=2000
sp_change_users_login
sql <=2005
ALTER USER [user] WITH LOGIN=[login]

Dariusz Brejnak · 11 września 2010 o 13:00

Oczywiście, można też w zależności od potrzeb zastosować sp_change_user_login ’ Update_One’, 'User1′, 'User1′

lub

sp_change_users_login 'Auto_Fix’, 'NazwaUsera’, NULL, 'P@ssw0rd’
Rozwiązuje to problem osieroconych użytkowników (Orphan users)

Możliwość komentowania została wyłączona.