In meinen Blogpost Verwaiste SQL-Logins auf einem SQL-Server ermitteln hab ich gezeigt, wie man mit Hilfe eines Skriptes ermitteln kann, welchen Logins gar keine Datenbanken mehr zugewiesen sind.
Aber das Thema der verwaisten Logins gibt es auch in umgekehrter Richtung: Jeder der bereits versucht hat, eine Datenbank von einem anderen Server wiederherzustellen und diese Datenbank verfügte über SQL-Benutzer, wird das Problem kennen: In der Datenbank gibt es unter dem Punkt Datenbank -> Security -> Users bereits mehrere Benutzer und diese sind unter Umständen auch mit Berechtigungen versehen, man möchte diese also nicht löschen. Die Benutzer existieren jedoch nicht als Logins unter Security -> Logins. Legt man dann gleichnamige Logins im SQL-Server an, so ist das auch noch recht unproblematisch - zumindest so lange bis man versucht, den neu angelegten Login auf der besagten Datenbank zuzulassen. Diesen Versuch quittiert der SQL-Server mit der Meldung, dass ein Benutzer mit diesem Namen in der Datenbank schon vorhanden ist - womit er ja grundsätzlich auch Recht hat.

Allerdings bedeutet das nicht, dass das eben neu angelegte Login aufgrund dieser Tatsache auch automatisch mit Zugriffsrechten auf der wiederhergestellten Datenbank ausgestattet ist.
Die Ursache liegt darin begründet, dass der SQL-Server den Benutzern intern eine SID zuweist. Die SID des Benutzers in der wiederhergestellten Datenbank und die SID des eben erstellten Logins unterscheiden sich.
Abhilfe schafft hier die Systemprozedur sp_change_users_login. Mit dem Parameter 'report' aufgerufen erhält man zunächst eine Auflistung aller Benutzer, die über keine Zuordnung zu Logins verfügen.

Nun steht also fest, dass es in der Datenbank fünf ungemappte Benutzer gibt. Mit Hilfe der gleichen Prozedur kann man nun auch gleich das Mapping vornehmen. Dazu übergibt man einfach als ersten Parameter 'update_one' und als zweiten bzw. dritten Parameter Benutzer und Login.

Prüft man nun die verwaisten Logins erneut, wird man feststellen, dass dieser Benutzer hier nicht mehr erscheint und versucht man ein Login auf der Datenbank, wird man merken, dass das nun funktioniert.