In SQL Server 2005 gibt es eine Möglichkeit, Benutzer zu finden, die entweder nicht auf Serverebene vorhanden sind (ein Konto, das auf Serverebene gelöscht, aber nicht von Datenbanken getrennt wurde, bevor es gelöscht wurde) oder Konten, die nicht verknüpft sind (Möglicherweise wurde ein Konto auf Serverebene gelöscht, jedoch nicht auf Datenbankebene. Anschließend wurde es erneut gelesen, aber die Datenbankebene wurde nie bereinigt.)
Ich habe einen sehr unordentlichen Server und es wäre fantastisch, wenn eine Abfrage ausgeführt werden müsste, um diese zu finden.
sql-server
sql-server-2005
users
DForck42
quelle
quelle
Antworten:
Das folgende Skript von der Brent Ozar Unlimited-Site durchläuft alle Datenbanken und listet die verwaisten Benutzer nach Datenbank sowie den Befehl drop auf, um sie zu entfernen. Möglicherweise gibt es eine sauberere / neuere Möglichkeit, dies zu handhaben, aber dies scheint zwischen 2005 und 2012 korrekt zu funktionieren.
quelle
Ich wollte Mark zuerst DANKEN, dass er das Skript veröffentlicht hat. Es hat mir viel Zeit gespart, es von Grund auf neu zu schreiben. Ich habe es ein wenig geändert, da ich auf ein Problem gestoßen bin, bei dem eine Fehlermeldung angezeigt wurde, dass der Datenbankprinzipal ein Schema in der Datenbank besitzt und nicht gelöscht werden kann. Ich habe das Skript geändert, um die Befehle für den SCHEMA-Fehler und auch für den Rollenfehler zu generieren, falls Sie diesen ebenfalls erhalten sollten.
Hoffe das hilft jemandem da draußen ..
quelle
Dieses sp_change_users_login wird ab SQL 2008 nicht mehr unterstützt, funktioniert aber weiterhin einwandfrei. Wenn Sie die Option "Bericht" übergeben, werden alle Benutzer aufgelistet, denen kein Login zugeordnet ist.
Wenn Sie es für alle Ihre Datenbanken ausführen möchten, können Sie dies folgendermaßen tun.
Wenn Sie es in BOL nachschlagen, finden Sie auch Optionen zum Reparieren von "verwaisten" Benutzern.
quelle