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
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.