Logowanie użytkowników i uprawnień do bazy danych mogą być niepoprawne po przywróceniu bazy danych


Objawy


Jeśli zrzutu użytkownika bazy danych programu SQL Server zostanie przywrócona do innego serwera SQL (na przykład serwerem zapasowym hot) lub do tego samego serwera SQL po przebudowywanie albo ponowne ładowanie starą wersję bazy danych master, logowanie użytkowników i uprawnień w bazie danych mogą być niepoprawne.

Ten problem może ujawnia się na kilka sposobów:
  • Podczas logowania się na serwerze 6.x, użytkowników może zostać wyświetlony następujący błąd:
    Msg 4002, poziom 14, stan: 1, serwera Microsoft SQL Server, 0 linii
    Logowanie nie powiodło się
    Biblioteki bazy danych: Logowanie jest niepoprawna.
  • Podczas logowania się na serwerze 7.0, użytkowników może zostać wyświetlony następujący błąd:
    Msg 18456, poziom 14, stan: 1,
    Niepowodzenie logowania użytkownika '%ls'.
  • Podczas próby uzyskania dostępu do obiektów w bazie danych, użytkownik może zostać wyświetlony następujący błąd:
    Msg 229, poziom 14, stan: 1
    Odmowa %s na obiekt %. * s, bazy danych %. * s, właściciel %.*s
  • Podczas próby utworzenia identyfikatora logowania i przyznać dostęp do przywróconej bazy danych lub Dodaj użytkownika do bazy danych, mogą pojawić się następujący błąd:
    Microsoft SQL-DMO (ODBC SQLState: 42000) błąd 15023: użytkownik lub rola '%s' już istnieje w bieżącej bazie danych.
  • Użytkownicy mogą mieć uprawnienia do obiektów, dla których wcześniej tak się nie stało.

Przyczyna


Informacje dotyczące logowania użytkowników jest przechowywane w tabeli syslogins w głównej bazie danych. Zmieniając serwery, lub przez zmianę tych informacji przez przebudowywanie lub przywracanie starej wersji bazy danych master informacje mogą być różne od utworzenia zrzutu użytkownika w bazie danych. Jeśli nie istnieją logowania dla użytkowników, otrzymają błąd wskazujący "Login failed" podczas próby zalogowania się do serwera. Jeśli logowanie użytkowników istnieje, ale wartości SUID (dla 6.x) lub wartości identyfikatora SID (dla 7.0) w polu wzorzec... syslogins i sysusers tabeli w bazie danych użytkowników różnią się, użytkownicy mogą mieć inne uprawnienia niż oczekiwana w bazie danych użytkowników.

Uwaga Jeśli używasz programu Microsoft SQL Server 2005 w tabeli syslogins i tabeli sysusers są implementowane jako widoki zgodności. Widoki te są sys.syslogins i sys.sysusers. Aby uzyskać więcej informacji o widokach zgodności zobacz temat "Zgodność widoków (Transact-SQL)" w dokumentacji SQL Server 2005 Books Online.

Obejście problemu


Aby obejść ten problem, wykonaj jedną z następujących czynności:
  • Jeśli bieżący skrypty są dostępne do dodania logowania, użytkownicy i uprawnienia, należy usunąć i odtworzyć je ze skryptów. Przykłady użycia skryptów logowania do przenoszenia między serwerami, zobacz następujący artykuł z bazy wiedzy Microsoft Knowledge Base:
    246133 jak: transferować identyfikatory logowania i hasła pomiędzy wystąpieniami programu SQL Server

    240872 sposobu rozwiązywania problemów związanych z uprawnieniami, po przeniesieniu bazy danych między serwerami SQL
  • Procedura przechowywana sp_change_users_login ponownie skojarzyć relacje między tabelami, syslogins, sysusers i sysalternates. Jednakże procedura sprawia, że najlepsze szacunki na łącza i może pozwolić użytkownikowi więcej przywileje dostępu niż zamierzano. Uruchomienie procedury z opcją raportu po raz pierwszy będzie generować listę użytkowników, które zostaną zmienione. Następnie należy sprawdzić, upewnij się, że zainteresowanych użytkowników mają odpowiednie uprawnienia. Należy również pamiętać, że procedury sp_change_users_login nie rozwiąże problemów uprawnienie pochodną logowania i użytkowników utworzone w innej kolejności na bazie gdzie zostanie przywrócona kopia zapasowa.
  • Przywrócić zrzut bazy danych master od czasu zrzut bazy danych użytkownika z serwerem przed załadowaniem bazy danych użytkowników. W ten sposób zapewnia zgodność wszystkich informacji o użytkowniku w bazie danych użytkowników poprawnie z tabeli syslogins w wzorca.


    Ostrzeżenie: bazy danych master zawiera informacje dotyczące całego serwera i dotyczy wszystkich baz danych na serwerze. Po przywróceniu bazy danych master, można napotkać identyfikatory użytkownika dodatkowe i/lub baz danych, które zostaną utracone lub niepoprawne uprawnienia. Wszelkie zmiany do wzorca, które miały miejsce od czasu wykonywania kopii zapasowej zostaną utracone. Tej metody należy używać tylko, jeśli masz pewność, że wersję kopii zapasowej bazy danych master zawiera dokładne informacje dla przetwarzanej bazy danych użytkownika i innych baz danych na serwerze.
  • Służy do kopiowania logowania Transfer Manager (dla 6.x) lub DTS (w przypadku wersji 7.0). Należy pamiętać, że hasła nie będą przekazywane za pomocą tej metody.
  • Skontaktuj się z dostawcą usług pomocy technicznej podstawowego.