Von wiederhergestellten Datenbanken und verwaisten Benutzern

Immer wieder - jedoch insgesamt selten und aus dem Grund auch leider immer wieder mit einer Suche verbunden - brauch ich nach der Wiederherstellung einer Datenbank eine Stored Procedure, um die Benutzer aus der wiederhergestellten Datenbank und die Logins des Servers wieder in “Einklang” zu bringen.

Das Problem tritt z.B. auf, wenn die DB in einem anderem Server wiederhergestellt wird. Die Ursache ist, dass zwar evtl. der Login- und der Username gleich, die im Hintergrund wirkenden ID’s aber unterschiedlich sind.

Nun. Hierfür gibt es die SP sp_change_users_login. Mit einem Administratorkonto (sysadmin oder db_owner) an der Datenbank anmelden und folgendes Ausführen:

Um eine Übersicht über die Benutzer zu bekommen, die verwaist sind

1
EXECUTE sp_change_users_login @action = 'Report'

Wenn der Login inkl. Passwort bereits eingerichtet ist, der Benutzer aber noch zugeordnet werden muss.

1
2
EXECUTE sp_change_users_login @action = 'Auto_Fix',
@userNamePattern = 'user'

Wenn der Benutzer zugeordnet und ein Login mit Passwort erstellt werden muss (ist der Login bereits vorhanden, wird @password ignoriert)

1
2
3
EXECUTE sp_change_users_login @action = 'Auto_Fix',
@userNamePattern = 'user',
@password = 'password'

Man kann auch einen Benutzer mit einem Login verbinden, wenn die beiden nicht den gleiche Namen haben. Dann sieht es so aus (auch hier kann noch optional ein Passwort angegeben werden)

1
2
3
EXECUTE sp_change_users_login @action = 'Update_One',
@userNamePattern = 'user',
@loginName = 'login'

So, und beim nächsten Mal weiß ich, wo ich suchen muss ;)