Reparatur der Login/User Zuordnung im SQL Server

18. April 2012
Bei einem Restore einer SQL Server Datenbank aus einem Fremdsystem werden User und somit die Berechtigungen der Datenbank mit eingespielt. Diese Benutzer sind in der Regel mit keinem Login des Servers verknüpft, auch wenn Login und der Benutzer den gleichen Namen tragen. In der Konsequenz hat der Login keine Berechtigung auf der Datenbank.

Die Zuordnung von User und Login erfolgt über die sogenannte SID (Secure Identifier). Nur wenn diese bei Login und User gleich sind erfolgt sie automatisch. Dies ist in der Regel nur der Fall, wenn Login und User im gleichen System erstellt worden sind. Nachfolgender Artikel zu "SQL Server Logins and Users" beschreibt die Zusammenhänge im Detail.

Für die Praxis helfen zwei kleine Stored Procedures:

Auflisten der User die keine Verknüpfung zu Logins haben:

sp_change_users_login 'report'

 User einer Datenbank einem Login zuordnen:

sp_change_users_login 'update_one', '[Username]', '[Login]'
-- oder auch (Danke an Frank für den Tipp) 
ALTER USER [Username] WITH Login = [Login]