Jak zweryfikować, czy hasła dla loginów SQL Servera są odpowiednio mocne?
Jak zweryfikować, czy hasła dla loginów SQL Servera są odpowiednio mocne?
Przy tworzeniu loginów można skorzystać z mechanizmu z konfiguracji zasad haseł zdefiniowanych w systemie operacyjnym. Jednak dla loginów już istniejących bezpośrednio nie ma możliwości zweryfikowania czy poziom skomplikowania hasła jest zgodny z aktualną GPO. Z drugiej strony, za pomocą GPO nie zabronimy tworzenia loginów z hasłami typu "Pa$$w0rd",które niby spełniają reguły GPO, ale są dość łatwe do odgadnięcia.
Można tu skorzystać z z funkcji SQL PWDCompare. Jeśli chcemy znaleźć loginy, które mają hasło "1234" musimy napisać takie zapytanie:
SELECT name FROM sys.sql_logins
WHERE PWDCOMPARE('1234', password_hash) = 1
Jeśli chcemy zrobić bardziej uniwersalne rozwiązanie, warto utworzyć sobie tabelę z listą haseł potencjalnie łatwych do odgadnięcia (takie statystyki są dostępne zwykle w Internecie do pobrania). Poniżej przykładowy do testu tego rozwiązania:
--tworze login ze słabym hasłem:
create login WeekLogin with password = 'P@ssw0rd'
--tworzę tabelę z listą przykładowych słabych haseł, których istnienie chcę zweryfikować:
create table WeekPasswords(
id int not null primary key identity(1,1),
pwd nvarchar(500))
insert into WeekPasswords values ('Pa$$w0rd'),('P@ssw0rd'),('1234'),(''),(' ')
--i zapytanie wyszukujące loginy ze słabymi hasłami:
SELECT distinct name FROM sys.sql_logins s
JOIN WeekPasswords w ON PWDCOMPARE(w.pwd, s.password_hash) = 1