Wie erstelle ich in SQL Server eine Anmeldung für einen vorhandenen Benutzer?


17

Ich habe eine Datenbank von einer SQL Server-Instanz auf eine andere SQL Server-Instanz zurückgeschrieben. Der Datenbank wurden bereits Benutzer hinzugefügt. Sie haben jedoch keine Anmeldeinformationen für die neue SQL Server-Instanz.

Ich kann neue Anmeldungen für neue Benutzer erstellen, aber wie erstelle ich Anmeldungen für vorhandene Benutzer?

Antworten:


9

Das Problem ist, dass die Wiederherstellung die Datenbankbenutzer von der ursprünglichen Serverinstanz zurückbringt, die neue Instanz jedoch normalerweise nichts von diesen Benutzeranmeldungen weiß. Sie werden unter Sicherheit auf Datenbankebene angezeigt, haben jedoch keine entsprechenden Anmeldungen auf Serverebene.

Sie müssen die Datenbankbenutzer mit Serveranmeldungen auf der Instanz, auf der Sie die Datenbank wiederhergestellt haben, erneut zuordnen.

Es gibt mehrere Möglichkeiten, dies zu tun:

  1. Erstellen Sie für sie neue Anmeldungen auf der neuen Instanz. Anschließend müssen Sie sie als Datenbankbenutzer auf der neuen Instanz entfernen und ihre neuen Anmeldungen hinzufügen. Dies erscheint seltsam, da Sie dieselben Anmeldenamen erstellen können, die SIDs (Sicherheitskennungen) jedoch unterschiedlich sind und SQL diese für die Benutzeridentifikation verwendet. Dies ist einfach genug für ein oder zwei Anmeldungen.

  2. Wenn Sie dieselben Benutzer und dieselben SIDs für alle Instanzen beibehalten möchten, verwenden Sie die gespeicherte Prozedur sp_help_revlogin . Kopieren Sie den Code aus dem Link, der die erforderlichen gespeicherten Prozeduren erstellt, und führen Sie ihn auf dem Server aus, von dem Sie Benutzer kopieren möchten. Es wird ein SQL-Skript generiert, das Sie auf Ihrem Zielserver ausführen können, um dieselben Benutzer zu erstellen, die SIDs, Kennwörter und alles mit sich führen. Dies ist der richtige Weg, wenn Sie viele Datenbankbenutzer haben, die Sie erneut auf der Zielinstanz verbinden müssen, oder wenn Sie keine Kennwörter für ein oder mehrere SQL-Anmeldungen auf der Quellinstanz kennen.


10

Ich führe immer den Befehl sp_change_users_login mit der Aktion 'Update_One' aus, um den Datenbankbenutzer erneut mit dem Server-Login zu verknüpfen:

sp_change_users_login 'Update_One', 'database user', 'server login'


Cool, ich habe dies verwendet: EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';statt. :)
user2173353

Ist dies nicht nur möglich, wenn sowohl der Datenbankbenutzer als auch der Server angemeldet sind, aber die Verbindung zwischen ihnen unterbrochen ist?
Wenzzzel

2

Hier ist was ich gefunden habe.

Wie squillman ausführte, werden die Benutzer mit der Datenbank kopiert, die Anmeldungen jedoch nicht. Es gibt eine Store-Prozedur namens sp_change_users_login, mit der Sie das Problem beheben können. Die Schritte dazu sind in diesem Artikel beschrieben . Einzelheiten zur Verwendung des Store-Verfahrens finden Sie auf dieser Seite .


2

Ab SQL Server 2012 gibt es einen T-SQL-Befehl, mit dem vorhandene Benutzer neuen Anmeldungen zugewiesen werden können. Erstellen Sie die Anmeldung, aber versuchen Sie nicht, Benutzerzuordnungen vorzunehmen (dies würde fehlschlagen). Dann führen Sie aus:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Dadurch wird das vorhandene Login dem neuen Benutzer zugeordnet. SQL-Dokumentation hier: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.