Allgemein
Ich würde nachlesen, welche Informationen die Master-Datenbank enthält und warum Sie die Systemdatenbanken (master, msdb, ...) sichern müssen.
Referenz: Sichern und Wiederherstellen von Systemdatenbanken (SQL Server) (Microsoft Docs)
Master-Datenbank
Die Master-Datenbank enthält die folgenden Informationen für jede SQL Server-Instanz:
Die Master-Datenbank zeichnet alle Informationen auf Systemebene für ein SQL Server-System auf. Dies umfasst instanzweite Metadaten wie Anmeldekonten , Endpunkte, Verbindungsserver und Systemkonfigurationseinstellungen. In SQL Server werden Systemobjekte nicht mehr in der Masterdatenbank gespeichert. Stattdessen werden sie in der Ressourcendatenbank gespeichert. Master ist auch die Datenbank, die das Vorhandensein aller anderen Datenbanken und den Speicherort dieser Datenbankdateien aufzeichnet und die Initialisierungsinformationen für SQL Server aufzeichnet. Daher kann SQL Server nicht gestartet werden, wenn die Masterdatenbank nicht verfügbar ist.
( Hervorhebung von mir)
Referenz: Master-Datenbank (Microsoft Docs)
msdb Datenbank
Die msdb-Datenbank enthält die folgenden Informationen einer SQL Server-Instanz:
Die msdb-Datenbank wird vom SQL Server-Agenten zum Planen von Warnungen und Jobs sowie von anderen Funktionen wie SQL Server Management Studio, Service Broker und Database Mail verwendet.
Beispielsweise verwaltet SQL Server automatisch einen vollständigen Online-Sicherungs- und Wiederherstellungsverlauf in Tabellen in msdb . Diese Informationen umfassen den Namen der Partei, die die Sicherung durchgeführt hat, den Zeitpunkt der Sicherung und die Geräte oder Dateien, auf denen die Sicherung gespeichert ist. SQL Server Management Studio verwendet diese Informationen, um einen Plan zum Wiederherstellen einer Datenbank und zum Anwenden von Transaktionsprotokollsicherungen vorzuschlagen. Sicherungsereignisse für alle Datenbanken werden aufgezeichnet, auch wenn sie mit benutzerdefinierten Anwendungen oder Tools von Drittanbietern erstellt wurden.Wenn Sie beispielsweise eine Microsoft Visual Basic-Anwendung verwenden, die SMO-Objekte (SQL Server Management Objects) aufruft, um Sicherungsvorgänge auszuführen, wird das Ereignis in den msdb-Systemtabellen, im Microsoft Windows-Anwendungsprotokoll und im SQL Server-Fehlerprotokoll protokolliert. Um die in msdb gespeicherten Informationen zu schützen, empfehlen wir Ihnen, das msdb-Transaktionsprotokoll in einem fehlertoleranten Speicher abzulegen.
( Hervorhebung von mir)
Referenz: msdb-Datenbank (Microsoft Docs)
Fazit
Wenn Sie die Master-Datenbank sichern, sind alle Anmeldeinformationen für die Instanz sicher. Wenn Sie jedoch die SQL-Anmeldungen der Instanz separat sichern möchten ( wie in: Zum Übertragen von Anmeldungen an verschiedene Instanzen, zum Zurücksetzen von Kennwörtern), müssen Sie eine andere Lösung anwenden.
Individuelle SQL Server Login Backup-Lösungen
Werkzeugreferenzliste
Bonus hinzugefügt
Die letzte Referenz ist ein interessanter Artikel zum manuellen Exportieren der SQL Server-Anmeldungen und der Hash-Kennwörter, um sie manuell auf eine neue SQL Server-Instanz zu übertragen. In diesem Artikel werden zwei gespeicherte Prozeduren erstellt und anschließend eine ausgeführt, um die Informationen zu erstellen.
Hier ist der Code aus dem Artikel, auf den verwiesen wird, um die beiden Prozeduren zu erstellen:
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @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 + 1
END
SELECT @hexvalue = @charvalue
GO
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary varbinary (256)
DECLARE @PWD_string varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)
DECLARE @defaultdb sysname
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@type IN ( 'G', 'U'))
BEGIN -- NT authenticated account/group
SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
END
ELSE BEGIN -- SQL Server authentication
-- obtain password and sid
SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
-- obtain password policy state
SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'
IF ( @is_policy_checked IS NOT NULL )
BEGIN
SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
END
IF ( @is_expiration_checked IS NOT NULL )
BEGIN
SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
END
END
IF (@denylogin = 1)
BEGIN -- login is denied access
SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
END
ELSE IF (@hasaccess = 0)
BEGIN -- login exists but does not have access
SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
END
IF (@is_disabled = 1)
BEGIN -- login is disabled
SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
END
PRINT @tmpstr
END
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
Nachdem Sie die gespeicherten Prozeduren erstellt haben, führen Sie sp_help_rev_login aus, um die Informationen abzurufen.
EXEC sp_help_revlogin
Das Ausgabeskript, das die gespeicherte Prozedur sp_help_revlogin generiert, ist das Anmeldeskript. Dieses Anmeldeskript erstellt die Anmeldungen mit der ursprünglichen Sicherheitskennung (SID) und dem ursprünglichen Kennwort.
Referenz: So übertragen Sie Anmeldungen und Kennwörter zwischen Instanzen von SQL Server (Microsoft KB-Artikel)
Genießen