W SQL Server 2005 istnieje sposób na znalezienie użytkowników, którzy albo nie istnieją na poziomie serwera (konto, które zostało usunięte na poziomie serwera, ale nie zostało odłączone od baz danych przed jego usunięciem) lub konta, które nie są połączone (konto mogło zostać usunięte na poziomie serwera, ale nie na poziomie db, a następnie odczytane, ale poziom db nigdy nie został wyczyszczony).
Mam bardzo niechlujny serwer i byłoby wspaniale, gdyby trzeba było uruchomić zapytanie, aby je znaleźć.
sql-server
sql-server-2005
users
DForck42
źródło
źródło
Odpowiedzi:
Poniższy skrypt ze strony Brent Ozar Nieograniczony iteracje przez wszystkich baz danych i list osierocone przez użytkowników bazy danych, wraz z poleceniem rozwijanego, aby je usunąć. Może istnieć lepszy / nowszy sposób radzenia sobie z tym, ale wydaje się, że działa poprawnie w latach 2005-2012.
źródło
Chciałem najpierw podziękować Markowi za opublikowanie skryptu. Zaoszczędziło mi to sporo czasu, pisząc go od podstaw. Zmodyfikowałem go trochę, ponieważ napotkałem problem polegający na tym, że błąd „główny podmiot bazy danych jest właścicielem schematu w bazie danych i nie można go usunąć”. Zmodyfikowałem skrypt, aby wygenerować komendy dla błędu SCHEMA, a także dla błędu roli, jeśli również go otrzymasz.
Mam nadzieję, że to pomoże komuś tam ..
źródło
To sp_change_users_login jest amortyzowane od SQL 2008, ale nadal działa dobrze. Jeśli przekażesz opcję „zgłoś”, wyświetli się lista wszystkich użytkowników, którzy nie mają powiązanego logowania.
Jeśli chcesz uruchomić go dla wszystkich baz danych, możesz to zrobić w ten sposób.
Jeśli zajrzysz do niego w BOL, znajdziesz również opcje naprawiania „osieroconych” użytkowników.
źródło