Verwaiste Benutzer finden und Logins neu zuordnen (nach Restore / AG)
SQL ServerSicherheitBefehl
USE [Musteri];
-- Database users without a matching login:
SELECT dp.name AS user_name, dp.type_desc, dp.authentication_type_desc, dp.sid, dp.create_date
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON sp.sid = dp.sid
WHERE sp.sid IS NULL
AND dp.type IN ('S', 'U', 'G')
AND dp.authentication_type_desc IN (N'INSTANCE', N'WINDOWS')
AND dp.principal_id > 4;
-- If a login with the same name exists, remap the SID:
ALTER USER [app_user] WITH LOGIN = [app_user];
-- Permanent fix: generate CREATE LOGIN with SID + password hash on the source, run it on the target:
SELECT N'CREATE LOGIN ' + QUOTENAME(sp.name)
+ N' WITH PASSWORD = ' + CONVERT(NVARCHAR(MAX), LOGINPROPERTY(sp.name, 'PasswordHash'), 1)
+ N' HASHED, SID = ' + CONVERT(NVARCHAR(MAX), sp.sid, 1)
+ N', CHECK_POLICY = OFF;' AS create_login_stmt
FROM sys.server_principals sp
WHERE sp.type = 'S' AND sp.name = N'app_user';Was es tut
Findet Datenbankbenutzer, deren SID zu keinem Server-Login passt (verwaist); ordnet einen Benutzer einem vorhandenen Login neu zu und erzeugt ein Skript, um Logins auf einem anderen Server mit derselben SID und demselben Passwort-Hash neu anzulegen.
Wann einsetzen
Nach dem Wiederherstellen/Anfügen einer Datenbank auf einem anderen Server, wenn die Anwendung nach einem AG-/Log-Shipping-Failover "Login failed for user" erhält, oder bei einer Servermigration.
Vorsicht
ALTER USER ... WITH LOGIN ändert die SID des Benutzers auf die des Logins; in einer AG überträgt sich diese Änderung vom Primary auf die Secondaries, aber haben die Logins auf den Secondary-Servern andere SIDs, kehrt das Problem beim nächsten Failover zurück. Die dauerhafte Lösung ist, Logins auf jeder Replica mit derselben SID anzulegen. Der Passwort-Hash ist sensibel; bewahre das Skript sicher auf. Benutzer in Contained Databases (authentication_type = DATABASE) brauchen kein Login und werden nicht aufgeführt.
Verwandte Einträge
- TDE einrichten: Master Key, Zertifikat, Zertifikatsbackup und Verschlüsselungsfortschritt
- SQL Server Audit einrichten: Logins, Berechtigungsänderungen und Tabellenzugriffe
- Audit von Logins und Berechtigungen: sysadmin-Mitglieder, riskante Berechtigungen, schwache Passwörter
- Ledger-Tabelle anlegen, ihre Änderungshistorie lesen und die Integrität verifizieren