Ich bin kürzlich in eine Umgebung gekommen, in der für viele Datenbankanmeldungen das enforce_password_policy
Flag nicht aktiviert ist.
Für eine bevorstehende Prüfung müssen die Kennwörter dieser Anmeldungen überprüft werden.
Ich habe die folgende Abfrage verwendet, um eine Liste der Anmeldungen zu erhalten und um festzustellen, ob die Flags aktiviert oder deaktiviert sind.
select
@@SERVERNAME as servername,
name,
IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN,
type_desc,
create_date,
is_policy_checked,
is_disabled,
password_hash,
PWDCOMPARE(name, password_hash) as UsernameAsPassword
FROM sys.sql_logins
Dies sagt mir jedoch nicht, ob die Kennwörter tatsächlich der Kennwortrichtlinie entsprechen, da das Flag nur beim Erstellen eines Benutzers relevant ist.
Gibt es eine bekannte Möglichkeit, vorhandene Benutzer auf die Einhaltung von Kennwortrichtlinien zu testen ?
Ich habe keinen Zugriff auf die alten Passwörter und würde eine Methode bevorzugen, die sie nicht erfordert.
quelle
PWDCOMPARE()
ich nicht wirklich viel gefunden, unabhängig davon, danke für die Mühe!Antworten:
Dies mag bei Ihren Benutzern nicht beliebt sein, aber ich glaube, der einzige Weg, den Sie sicher wissen können, besteht darin , eine Kennwortänderung für jede SQL-Anmeldung mit zu erzwingen
CHECK_POLICY = ON
. Dadurch wird eine Reihe vonALTER LOGIN
Befehlen mit leeren Kennwörtern generiert. Sie können die Abfrage aktualisieren, indem Sie allen ein gemeinsames Kennwort geben, oder jedes manuell mit einzelnen Kennwörtern aktualisieren. Stellen Sie einfach sicher, dass sie Ihren Richtlinien entsprechen. Natürlich müssen Sie sicherstellen, dass die Kennwortrichtlinie so komplex ist, wie Sie es erwarten, und dass sie aktiviert ist (Systemsteuerung> Verwaltung> Lokale Sicherheitsrichtlinie> Kontorichtlinien> Kennwortrichtlinie> Kennwort muss die Komplexitätsanforderungen erfüllen).Steve Jones hat vor einiger Zeit darüber geschrieben. Beachten Sie, dass Sie sich aufgrund der folgenden Informationen nicht darauf verlassen können
is_policy_checked = 1
, dass das Kennwort tatsächlich Ihrer aktuellen Richtlinie entspricht, da die Anmeldung möglicherweise mit einem Hash-Kennwort erstellt wurde (in diesem Fall kann das Nur-Text-Kennwort nicht verwendet werden) aktiviert) oder während die lokale Komplexitätsrichtlinie deaktiviert war (was immer noch dazu führtis_policy_checked = 1
).Ein anderer Ansatz, von dem ich dachte, dass er funktionieren würde, wäre zu versuchen, eine Kopie jedes Logins mit seinem aktuellen
password_hash
und mit zu erstellen und jeden Fehler zuCHECK_POLICY = ON
notieren, der fehlschlägt. Dies kann jedoch nicht funktionieren - auch wennCHECK_POLICY = ON
keine Überprüfung eines bereits gehashten Passworts durchgeführt wird. Ich werde den Code für die Nachwelt einfügen - aber die Richtlinie kann von Natur aus einfach nicht überprüft werden.Persönlich denke ich, dass dies ein Fehler ist. Wenn die Syntax es mir ermöglicht, eine Anmeldung mit einem Hash-Kennwort zu erstellen, und ich festlegen kann, dass dieses Kennwort meiner Komplexitätsrichtlinie entsprechen muss, sollte ein Fehler oder eine Warnung generiert werden, dass die Richtlinie tatsächlich nicht überprüft wurde.
UPDATE : Ich habe einen Fehler gegen dieses Verhalten eingereicht.
quelle
select @@SERVERNAME as servername, name FROM sys.sql_logins where PWDCOMPARE(name, password_hash) = 1 AND is_policy_checked = 1;
gab mehrere positive Ergebnisse. Also muss ich das für alle Logins tun , nicht nur für diejenigen mitis_policy_checked
deaktiviertem Login.Es gibt keine Möglichkeit, dass Sie dies 100% genau bekommen. Sie können jedoch
PWDCOMPARE
eine Liste mit schwachen Passwörtern verwenden (Sie können die Liste der schwachen Passwörter ergänzen und einen Vergleich durchführen).Ich habe ein ähnliches Skript geschrieben, das den Vergleich durchführt und Ihnen die Ergebnisse liefert. Ich habe es auf Github gepostet .
BEARBEITEN:
Jetzt können Sie eine Liste schwacher Passwörter in einer CSV haben und dann dbatools
Test-DbaLoginPassword
mit-Dictionary
Schalter verwenden (Gibt eine Liste von Passwörtern an, die in den Test für schwache Passwörter einbezogen werden sollen .)quelle
Die Kennwortrichtlinie pro SQL-Anmeldung ist nur ein Flag für Ein oder Aus. Wenn das Kennwort Kennwortrichtlinie aktiviert ist, wird die Windows-Kennwortrichtlinie des Betriebssystems erzwungen.
In der Dokumentation zu CREATE LOGIN finden Sie Einzelheiten dazu, was passiert, wenn CHECK_POLICY und CHECK_EXPIRATION festgelegt sind.
Sie können die Einstellungen pro SQL-Benutzer anzeigen, indem Sie die Spalten is_policy_checked und is_expiration_checked in sys.sql_logins überprüfen
so etwas wie unten:
Für SQL Server-Authentifizierungsanmeldungen:
select * from sys.server_principals where type in ('U','G')
- zeigt Ihnen die Anmeldungen und Gruppen, die über die Windows-Authentifizierung auf einen SQL Server zugreifen können.quelle