检查SQL Server上的常用密码

时间:2019-05-07 13:59:14

标签: sql sql-server passwords

NCSC已发布了100.000个最常用密码的列表,请参阅100K passwords
我想知道我的用户是否使用过其中一个密码,所以我写了一张支票,是受bp_check提示的启发。

我做对了吗?
我在使用UniCode时遇到问题,但现在应该已经解决了。

1 个答案:

答案 0 :(得分:2)

这是我的代码,用于运行这种密码检查:

--    script to check if any of the passwords on your SQL Server is amongst the 100.000 most used passwords that Troy Hunt and NCSC released

--    see https://www.ncsc.gov.uk/blog-post/passwords-passwords-everywhere


    --drop table dbo.PwnedPasswordTop100k 
    create table dbo.PwnedPasswordTop100k ( pw nvarchar(500) collate Latin1_General_CS_AS not null)
    go
    bulk insert dbo.PwnedPasswordTop100k
    FROM 'c:\temp\PwnedPasswordTop100k.txt'
    WITH
    (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
     , codepage=65001 
    )
    go

    SELECT sl.name , ppt.pw 
    from sys.sql_logins sl
    cross join dbo.PwnedPasswordTop100k ppt
    where PWDCOMPARE(ppt.pw, sl.password_hash) = 1  
    union all
    SELECT s.name, 'password is NULL' FROM sys.sql_logins s  -- password is null (from idea from BP_Check http://aka.ms/BPCheck;)
    where password_hash is null 
    and name NOT IN ('MSCRMSqlClrLogin','##MS_SmoExtendedSigningCertificate##','##MS_PolicySigningCertificate##','##MS_SQLResourceSigningCertificate##','##MS_SQLReplicationSigningCertificate##','##MS_SQLAuthenticatorCertificate##','##MS_AgentSigningCertificate##','##MS_SQLEnableSystemAssemblyLoadingUser##')
    union all
    SELECT s.name, s.Name FROM sys.sql_logins s   -- password the same as login (from idea from BP_Check http://aka.ms/BPCheck;)
    where PWDCOMPARE(s.name, s.name) = 1

    --select top (10000) * from dbo.PwnedPasswordTop100k where pw like N'пїЅпїЅпїЅпїЅ'

    begin try
      drop table dbo.PwnedPasswordTop100k 
    end try
    begin catch
    end catch

必须将PwnedPasswordTop100k.txt文件复制到SQL Server上的c:\ temp ,并且运行SQL Server的帐户必须有权访问该文件。或者,将路径更改为SQL Server可以看到的位置。

并非所有人都能访问SQL Server可以看到的共享。
所以我还写了一个包含所有密码的脚本: Script with 100.000 passwords
这是1500 kB的SELECT语句。
很大,但是您可以在SQL Server Management Studio中运行它。

我的SQL Server可以每分钟检查大约 6个用户,因此该脚本不是很快。