De hoofdsleutel van de database wordt versleuteld met de hoofdsleutel van de server, die specifiek is voor de machine waarop SQL Server is geïnstalleerd. Wanneer u de database naar een andere server verplaatst, verliest u de mogelijkheid om de databasehoofdsleutel automatisch te decoderen en te openen, omdat de lokale serversleutel hoogstwaarschijnlijk anders zal zijn. Als u de hoofdsleutel van de database niet kunt ontsleutelen, kunt u ook niets anders ontsleutelen dat ervan afhangt (certificaten, symmetrische sleutels, enz.).
Kortom, u wilt de databasehoofdsleutel opnieuw versleutelen tegen de nieuwe serversleutel, wat u met dit script kunt doen (met beheerdersrechten):
-- Reset database master key for server (if database was restored from backups on another server)
OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
Houd er rekening mee dat wanneer u een databasehoofdsleutel maakt, u altijd ook een wachtwoord moet opgeven, zodat u de sleutel kunt openen met het wachtwoord in het scenario waarin de servicehoofdsleutel niet kan worden gebruikt - hopelijk heeft u dat wachtwoord ergens opgeslagen!
U kunt ook een back-up van de hoofdsleutel van de database terugzetten, maar u hebt er een nodig die voor de doelserver is gemaakt, niet voor de bronserver.
Als u geen back-up of wachtwoord hebt, weet ik niet zeker of u de versleutelde gegevens op de nieuwe server kunt herstellen, omdat u de hoofdsleutel van de database moet verwijderen en opnieuw moet maken met een nieuw wachtwoord. die alle afhankelijke sleutels en gegevens zal doden.