SQL Server: Logins mit Original-Passwort-Hash und Original-SID skripten

von

in

Bei der Migration von SQL Server-Datenbanken zwischen Instanzen ist das Skripten von Logins mit dem originalen Passwort-Hash und der originalen SID entscheidend – sonst entstehen “Orphaned Users” in den migrierten Datenbanken.

Das Problem: Orphaned Users

Datenbankbenutzer sind intern mit ihrer Login-SID verknüpft. Wenn ein Login auf einer neuen Instanz mit einer anderen SID erstellt wird, können die Datenbankbenutzer dem Login nicht zugeordnet werden – sie werden “verwaist” (Orphaned).

Logins mit Hash und SID skripten

-- Script für alle SQL Logins mit Hash und SID
SELECT
    'CREATE LOGIN [' + name + '] WITH PASSWORD = ' +
    CONVERT(VARCHAR(MAX), password_hash, 1) + ' HASHED, ' +
    'SID = ' + CONVERT(VARCHAR(MAX), sid, 1) + ', ' +
    'DEFAULT_DATABASE = [' + default_database_name + '], ' +
    'CHECK_POLICY = ' + CASE is_policy_checked WHEN 1 THEN 'ON' ELSE 'OFF' END + ', ' +
    'CHECK_EXPIRATION = ' + CASE is_expiration_checked WHEN 1 THEN 'ON' ELSE 'OFF' END
FROM sys.sql_logins
WHERE name NOT LIKE '##%'  -- Interne Logins ausschließen
  AND name != 'sa';

Windows Logins skripten

-- Windows Logins (AD-Accounts und Gruppen)
SELECT
    'CREATE LOGIN [' + name + '] FROM WINDOWS WITH ' +
    'DEFAULT_DATABASE = [' + default_database_name + ']'
FROM sys.server_principals
WHERE type IN ('U', 'G')  -- U=Windows User, G=Windows Group
  AND name NOT LIKE 'NT %'
  AND name NOT LIKE 'BUILTIN%';

Mit diesem Verfahren werden Logins mit exakt denselben SIDs auf der Zielinstanz erstellt – Orphaned Users werden vermieden, und die migrierten Datenbanken funktionieren sofort ohne manuelle Neuzuweisung.