Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Übertragen von Benutzernamen und Kennwörtern zwischen Instanzen von SQL-Server

Dieser Artikel wurde zuvor veröffentlicht unter D246133
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
246133 How to transfer logins and passwords between instances of SQL Server
Zusammenfassung
Nachdem Sie Datenbanken auf einen neuen Server verschoben haben, können sich die Benutzer unter Umständen nicht auf dem neuen Server anmelden. Stattdessen wird folgende Fehlermeldung angezeigt:
Meldung 18456, Ebene 16, Status 1
Anmeldung für Benutzer '%ls' fehlgeschlagen.
Sie müssen die Benutzernamen und Kennwörter auf den neuen Server übertragen. Dieser Artikel beschreibt, wie Sie Benutzernamen und Kennwörter auf einen neuen Server übertragen.

Übertragen von Benutzernamen und Kennwörtern zwischen Servern, auf denen SQL Server 7.0 ausgeführt wird

Mithilfe der Funktion Objektübertragung der Data Transformation Services (DTS) in SQL Server 7.0 können Benutzernamen und Benutzer zwischen zwei Servern übertragen werden. Die Kennwörter für SQL Server-authentifizierte Anmeldungen werden dabei jedoch nicht übertragen. Gehen Sie nach der Anleitung im Abschnitt "Komplettlösung zum Übertragen von Benutzernamen und Kennwörtern zwischen verschiedenen Versionen von SQL-Server" dieses Artikels vor, um Benutzernamen und Kennwörter von einem SQL Server 7.0-basierten Server auf einen anderen SQL Server 7.0-basierten Server zu übertragen.

Übertragen von Benutzernamen und Kennwörtern von SQL Server 7.0 auf SQL Server 2000 oder zwischen Servern, auf denen SQL Server 2000 ausgeführt wird

Zum Übertragen von Benutzernamen und Kennwörtern von einem SQL Server 7.0-Server auf eine Instanz eines SQL Server 2000-Servers oder zwischen zwei SQL Server 2000-Instanzen können Sie den neuen Task "Benutzernamen übertragen" des DTS-Pakets von SQL Server 2000 verwenden. Gehen Sie hierzu folgendermaßen vor:
  1. Stellen Sie die Verbindung zu dem SQL Server 2000-Zielserver her, gehen Sie zu den Data Transformation Services im SQL Server Enterprise Manager, erweitern Sie den Ordner, klicken Sie mit der rechten Maustaste auf Lokale Pakete, und klicken Sie auf Neues Paket.
  2. Nachdem der DTS-Paketdesigner geöffnet wurde, klicken Sie im Menü Task auf Task "Benutzernamen übertragen". Geben Sie die entsprechenden Informationen auf den Registerkarten Quelle, Ziel und Benutzernamen ein.

    Wichtig: Der SQL Server 2000-Zielserver darf nicht die 64-Bit-Version von SQL Server 2000 verwenden. Die DTS-Komponenten für die 64-Bit-Version von SQL Server 2000 sind nicht verfügbar. Wenn Sie Benutzernamen aus einer SQL Server-Instanz importieren, die sich auf einem separaten Computer befindet, muss Ihre SQL Server-Instanz unter einem Domänenkonto laufen, um den Task ausführen zu können.

    Hinweis: Die DTS-Methode überträgt die Kennwörter, aber nicht die ursprünglichen SIDs. Wird ein Login nicht mit der ursprünglichen SID erstellt und werden Benutzerdatenbanken ebenfalls auf einen neuen Server transferiert, so verwaisen die Datenbankbenutzer in Bezug auf den Login. Folgen Sie den Schritten im Abschnitt "Komplettlösung zum Übertragen von Benutzernamen und Kennwörtern zwischen verschiedenen Versionen von SQL-Server " dieses Artikels, um die ursprüngliche SID zu übertragen und das Problem der verwaisten Benutzer zu umgehen.

Übertragen von Benutzernamen und Kennwörtern zwischen Instanzen von SQL-Server 2005

Weitere Informationen zum Übertragen von Benutzernamen und Kennwörtern zwischen Instanzen von SQL-Server finden Sie im folgenden Artikel der Microsoft Knowledge Base:
918992 Wie Übertragen der Benutzername und der Kennworte zwischen alle Instanzen von SQL Server 2005

Komplettlösung zum Übertragen von Benutzernamen und Kennwörtern zwischen verschiedenen Versionen von SQL-Server

Diese Methode bezieht sich auf folgende Szenarien:
  • Sie übertragen Benutzernamen und Kennwörter von SQL Server 7.0 auf SQL Server 7.0.
  • Sie übertragen Benutzernamen und Kennwörter von SQL Server 7.0 auf SQL Server 2000.
  • Sie übertragen Benutzernamen und Kennwörter von SQL Server 7.0 auf SQL Server 2005.
  • Sie übertragen Benutzernamen und Kennwörter zwischen Servern, auf denen SQL Server 2000 ausgeführt wird.
  • Sie übertragen Benutzernamen und Kennwörter von SQL Server 2000 auf SQL Server 2005.
Hinweis: Wichtige Informationen bezüglich der folgenden Schritte entnehmen Sie den Anmerkungen am Ende dieses Artikels.

Führen Sie folgende Schritte aus, um Benutzernamen und Kennwörter zwischen verschiedenen Versionen von SQL Server zu übertragen:
  1. Führen Sie das folgende Skript auf dem SQL-Quellserver aus. Dieses Skript erstellt zwei gespeicherte Prozeduren mit den Namen sp_hexadecimal und sp_help_revlogin in Ihrer master-Datenbank. Fahren Sie mit Schritt 2 fort, wenn Sie die Prozedur erstellt haben.

    Hinweis: Die folgende Prozedur ist von SQL Server-Systemtabellen abhängig. Die Struktur dieser Tabellen kann in unterschiedlichen Versionen von SQL Server abweichen. Von einer direkten Auswahl aus den Systemtabellen wird abgeraten.
    ----- Begin Script, Create sp_help_revlogin procedure -----USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULL  DROP PROCEDURE sp_hexadecimalGOCREATE PROCEDURE sp_hexadecimal    @binvalue varbinary(256),    @hexvalue varchar(256) OUTPUTASDECLARE @charvalue varchar(256)DECLARE @i intDECLARE @length intDECLARE @hexstring char(16)SELECT @charvalue = '0x'SELECT @i = 1SELECT @length = DATALENGTH (@binvalue)SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN  DECLARE @tempint int  DECLARE @firstint int  DECLARE @secondint int  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))  SELECT @firstint = FLOOR(@tempint/16)  SELECT @secondint = @tempint - (@firstint*16)  SELECT @charvalue = @charvalue +    SUBSTRING(@hexstring, @firstint+1, 1) +    SUBSTRING(@hexstring, @secondint+1, 1)  SELECT @i = @i + 1ENDSELECT @hexvalue = @charvalueGOIF OBJECT_ID ('sp_help_revlogin') IS NOT NULL  DROP PROCEDURE sp_help_revlogin GOCREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL ASDECLARE @name    sysnameDECLARE @xstatus intDECLARE @binpwd  varbinary (256)DECLARE @txtpwd  sysnameDECLARE @tmpstr  varchar (256)DECLARE @SID_varbinary varbinary(85)DECLARE @SID_string varchar(256)IF (@login_name IS NULL)  DECLARE login_curs CURSOR FOR     SELECT sid, name, xstatus, password FROM master..sysxlogins     WHERE srvid IS NULL AND name <> 'sa'ELSE  DECLARE login_curs CURSOR FOR     SELECT sid, name, xstatus, password FROM master..sysxlogins     WHERE srvid IS NULL AND name = @login_nameOPEN login_curs FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwdIF (@@fetch_status = -1)BEGIN  PRINT 'No login(s) found.'  CLOSE login_curs   DEALLOCATE login_curs   RETURN -1ENDSET @tmpstr = '/* sp_help_revlogin script ' PRINT @tmpstrSET @tmpstr = '** Generated '   + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'PRINT @tmpstrPRINT ''PRINT 'DECLARE @pwd sysname'WHILE (@@fetch_status <> -1)BEGIN  IF (@@fetch_status <> -2)  BEGIN    PRINT ''    SET @tmpstr = '-- Login: ' + @name    PRINT @tmpstr     IF (@xstatus & 4) = 4    BEGIN -- NT authenticated account/group      IF (@xstatus & 1) = 1      BEGIN -- NT login is denied access        SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''        PRINT @tmpstr       END      ELSE BEGIN -- NT login has access        SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''        PRINT @tmpstr       END    END    ELSE BEGIN -- SQL Server authentication      IF (@binpwd IS NOT NULL)      BEGIN -- Non-null password        EXEC sp_hexadecimal @binpwd, @txtpwd OUT        IF (@xstatus & 2048) = 2048          SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'        ELSE          SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'        PRINT @tmpstr	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name           + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '      END      ELSE BEGIN         -- Null password	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name           + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '      END      IF (@xstatus & 2048) = 2048        -- login upgraded from 6.5        SET @tmpstr = @tmpstr + '''skip_encryption_old'''       ELSE         SET @tmpstr = @tmpstr + '''skip_encryption'''      PRINT @tmpstr     END  END  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd  ENDCLOSE login_curs DEALLOCATE login_curs RETURN 0GO ----- End Script -----
  2. Nachdem Sie die Prozedur sp_help_revlogin erstellt haben, führen Sie sie mit dem Query Analyzer auf dem Quellserver aus. Die gespeicherte Prozedur sp_help_revlogin kann sowohl bei SQL Server 7.0 als auch bei SQL Server 2000 eingesetzt werden. Die Prozedur gibt Anmeldeskripte aus, die Benutzernamen mit der ursprünglichen SID und dem ursprünglichen Kennwort erzeugen. Speichern Sie die Ausgabe, kopieren Sie sie in den Query Analyzer auf dem SQL-Zielserver, und führen Sie sie aus. Beispiel:
    EXEC master..sp_help_revlogin

Anmerkungen

  • Überprüfen Sie das Ausgabeskript sorgfältig, bevor Sie es auf dem SQL-Zielserver ausführen. Wenn Sie Benutzernamen auf eine SQL-Server-Instanz übertragen müssen, die sich in einer anderen Domäne als die SQL-Server-Quellinstanz befindet, bearbeiten Sie das mithilfe der Prozedur sp_help_revlogin erzeugte Skript, und ersetzen Sie den Domänennamen durch den neuen Domänennamen in den Anweisungen sp_grantlogin. Da die integrierten Benutzernamen mit Zugriff in der neuen Domäne nicht dieselbe SID wie die Benutzernamen in der Originaldomäne haben, verwaisen die Datenbankbenutzer dieser Benutzernamen. Weitere Informationen zum Lösen des Problems der verwaisten Benutzer finden Sie in den nachfolgend aufgeführten Artikeln. Wenn Sie integrierte Benutzernamen zwischen SQL Server-Instanzen in derselben Domäne übertragen, wird dieselbe SID verwendet, sodass der Benutzer kaum verwaisen kann.
  • Nachdem Sie die Benutzernamen verschoben haben, fehlen Benutzern möglicherweise Berechtigungen für Datenbanken, die auch verschoben wurden. Dieses Problem wird als "verwaister Benutzer" bezeichnet. Wenn Sie versuchen, die Anmeldung bei der Datenbank zu erlauben, wird womöglich nicht angezeigt, dass der Benutzer bereits existiert:
    Microsoft SQL-DMO (ODBC SQLState: 42000) Fehler 15023: Der Benutzer oder die Rolle '%s' ist in der aktuellen Datenbank bereits vorhanden.
    Eine Anleitung dazu, wie Sie die Benutzernamen den Datenbankbenutzern zuordnen können, um das Problem verwaister SQL-Server-Benutzernamen und integrierter Benutzernamen zu beheben, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
    240872 Lösen von Zugriffsproblemen, wenn eine Datenbank auf einen anderen SQL-Server verschoben wird
    Eine Anleitung dazu, wie Sie die gespeicherte Prozedur sp_change_users_login einsetzen können, um verwaiste Benutzer der Reihe nach zu beheben (dies gilt nur für verwaiste Benutzer von standardmäßigen SQL-Benutzernamen) finden Sie im folgenden Artikel der Microsoft Knowledge Base:
    274188 PRB: Problemthema "Behandlung" bei verwaisten Benutzern in Online-Dokumentation befindet sich unvollständig
  • Wenn die Übertragung von Benutzernamen und Kennwörtern im Rahmen der Verschiebung von Datenbanken auf einen neuen SQL Server-basierten Server erfolgt, lesen Sie den folgenden Artikel der Microsoft Knowledge Base, um eine Beschreibung des Workflows und der einzelnen Schritte zu erhalten:
    314546 Verschieben von Datenbanken zwischen Computern mit SQL Server
  • Dieses Verfahren wird durch den Parameter @encryptopt in der gespeicherten Systemprozedur sp_addlogin ermöglicht, die das Erstellen eines Benutzernamens mithilfe des verschlüsselten Kennworts erlaubt. Weitere Informationen zu dieser Prozedur finden Sie unter dem Thema "sp_addlogin (T-SQL)" in der Onlinedokumentation zu SQL Server.
  • Standardmäßig können nur Mitglieder der festen Serverrolle sysadmin auf die Tabelle sysxlogins zugreifen. Sofern nicht ein Mitglied der sysadmin-Rolle die erforderlichen Berechtigungen erteilt, können Endbenutzer diese gespeicherten Prozeduren weder erstellen noch ausführen.
  • Bei diesem Ansatz wird nicht versucht, die Informationen der Standarddatenbank für einen bestimmten Benutzernamen zu übertragen, da die Standarddatenbank nicht unbedingt auf dem Zielserver existieren muss. Verwenden Sie die gespeicherte Systemprozedur sp_defaultdb, indem Sie den Benutzernamen und die Standarddatenbank als Argumente übergeben, um die Standarddatenbank für einen Benutzernamen festzulegen. Weitere Informationen zur Verwendung dieser Prozedur finden Sie unter dem Thema "sp_defaultdb" in der Onlinedokumentation zu SQL Server.
  • Wenn bei einer Übertragung von Benutzernamen zwischen SQL-Servern die Sortierreihenfolge des Quellservers nicht zwischen Groß- und Kleinschreibung unterscheidet, die Sortierreihenfolge des Zielservers jedoch schon, müssen Sie nach der Übertragung der Benutzernamen auf den Zielserver alle Buchstaben in Kennwörtern als Großbuchstaben eingeben. Wenn die Sortierreihenfolge des Quellservers zwischen Groß- und Kleinschreibung unterscheidet, die Sortierreihenfolge des Zielservers jedoch nicht, können Sie sich mit den Benutzernamen, die mit der in diesem Artikel beschriebenen Prozedur übertragen wurden, nicht anmelden, es sei denn, die ursprünglichen Kennwörter enthalten keine Buchstaben oder alle enthaltenen Buchstaben sind Großbuchstaben. Wenn beide Server zwischen Groß- und Kleinschreibung unterscheiden bzw. nicht unterscheiden, tritt dieses Problem nicht auf. Es handelt sich dabei um eine Nebenwirkung der Handhabung von Kennwörtern in SQL Server. Weitere Informationen hierzu finden Sie unter dem Thema "Effect on Passwords of Changing Sort Orders" in der Onlinedokumentation zu SQL Server 7.0.
  • Wenn Sie die Ausgabe des Skripts sp_help_revlogin auf dem Zielserver ausführen, und der Zielserver besitzt bereits einen Benutzernamen desselben Namens wie einer der Benutzernamen der Skriptausgabe, wird nach der Ausführung der Ausgabe des Skripts sp_help_revlogin möglicherweise die folgende Fehlermeldung angezeigt:
    Server: Meldung 15025, Ebene 16, Status 1, Prozedur sp_addlogin, Zeile 56
    Benutzername 'test1' ist bereits vorhanden.
    Entsprechend wird, wenn auf diesem Server ein anderer Benutzername mit derselben SID wie der Benutzername existiert, den Sie gerade hinzufügen möchten, die folgende Fehlermeldung angezeigt:
    Server: Meldung 15433, Ebene 16, Status 1, Prozedur sp_addlogin, Zeile 93
    Angegebener Parameter @sid wird verwendet.
    Daher müssen Sie die Ausgabe dieser Befehle sorgfältig überprüfen, den Inhalt der Tabelle sysxlogins durchgehen und entsprechend auf diese Fehler reagieren.
  • Der SID-Wert für einen bestimmten Benutzernamen wird als Basis für die Implementierung des Datenbankzugriffs in SQL Server verwendet. Daher gilt Folgendes: Wenn derselbe Benutzername zwei unterschiedliche SID-Werte auf der Datenbankebene (in zwei unterschiedlichen Datenbanken auf diesem Server) hat, kann der Benutzer nur auf die Datenbank zugreifen, deren SID mit dem Wert in der Tabelle syslogins für diesen Benutzer übereinstimmt. Eine solche Situation könnte eintreten, wenn die zwei betroffenen Datenbanken aus zwei unterschiedlichen Servern konsolidiert wurden. Der betroffene Benutzer müsste mithilfe der gespeicherten Prozedur sp_dropuser manuell aus der Datenbank mit dem SID-Konflikt entfernt und anschließend mithilfe der gespeicherten Prozedur sp_adduser erneut hinzugefügt werden, um dieses Problem zu beheben.
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 246133 – Letzte Überarbeitung: 02/15/2011 22:41:00 – Revision: 6.2

  • kbsqlssis kbhowtomaster kbinfo KB246133
Feedback
ml>