Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
Active Directory Logins auf SQL Server Instanzen pflegen? Gute Vorsätze, schlechte Praxis |
03.12.2024 10:22:51 |
SQL Repo |
|
|
|
03.12.2024 10:24:27 |
SQL Repo |
|
|
Von:
SQL Repo |
Datum:
03.12.2024 10:22:51 |
Views:
111 |
Rating:
|
Antwort:
|
Thema:
Active Directory Logins auf SQL Server Instanzen pflegen? Gute Vorsätze, schlechte Praxis |
Auslesen der SID aus SQL Server heraus mit folgender Abfrage:
SELECT name AS LoginName, sid AS LoginSID
FROM sys.server_principals
WHERE type IN ('U', 'G') -- Nur Benutzer und Gruppen
AND name LIKE '%\%'; -- Nur AD-Konten
Das Ergebnis speichert man als CSV-File und führt folgendes Powershell aus um die SID gegen das Active-Directory zu prüfen:
# Active Directory-Modul laden
Import-Module ActiveDirectory
# CSV-Datei mit AD-Logins einlesen
$SQLLogins = Import-Csv -Path "C:\tmp\sql_logins.csv"
# Verarbeite jede Zeile in der CSV-Datei
foreach ($Login in $SQLLogins) {
try {
# Sicherstellen, dass LoginName vorhanden ist
if (-not $Login.LoginName) {
Write-Output "Fehler: Kein LoginName in der CSV-Datei für einen Eintrag."
continue
}
# Extrahiere den SamAccountName aus LoginName (Teil nach '\')
$DomainUser = $Login.LoginName -split '\\'
if ($DomainUser.Count -eq 2) {
$Domain = $DomainUser[0]
$SamAccountName = $DomainUser[1]
} else {
Write-Output "Fehler: Ungültiges Login-Format für '$($Login.LoginName)'."
continue
}
# Prüfe zuerst, ob es ein Benutzer ist
$ADUser = Get-ADUser -Filter "SamAccountName -eq '$SamAccountName'" -ErrorAction SilentlyContinue
if ($null -ne $ADUser) {
#Write-Output "$($Login.LoginName): Benutzer existiert im AD."
# Optional: Benutzerdetails anzeigen
#Write-Output " Anzeigename: $($ADUser.DisplayName)"
#Write-Output " E-Mail: $($ADUser.EmailAddress)"
continue
}
# Falls kein Benutzer gefunden wurde, prüfen, ob es eine Gruppe ist
$ADGroup = Get-ADGroup -Filter "SamAccountName -eq '$SamAccountName'" -ErrorAction SilentlyContinue
if ($null -ne $ADGroup) {
#Write-Output "$($Login.LoginName): Gruppe existiert im AD."
# Optional: Gruppendetails anzeigen
#Write-Output " Gruppenname: $($ADGroup.Name)"
continue
}
# Weder Benutzer noch Gruppe gefunden
Write-Output "$($Login.LoginName)"#: Weder Benutzer noch Gruppe existiert im AD."
} catch {
# Fehlerbehandlung für unvorhergesehene Probleme
Write-Output "$($Login.LoginName): Fehler beim Abrufen des AD-Objekts. $_"
}
}
|
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Bitte geben Sie ein aussagekräftiges Thema an.
Bitte geben Sie eine gültige Email Adresse ein!
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
Active Directory Logins auf SQL Server Instanzen pflegen? Gute Vorsätze, schlechte Praxis |
03.12.2024 10:22:51 |
SQL Repo |
|
|
|
03.12.2024 10:24:27 |
SQL Repo |
|
|