【问题标题】:check for commonly used passwords on SQL Server检查 SQL Server 上的常用密码
【发布时间】:2019-05-07 13:59:14
【问题描述】:

NCSC 发布了 100.000 个最常用密码的列表,请参阅100K passwords
我想知道我的任何用户是否使用过其中一个密码,所以我写了一张支票,灵感来自 bp_check 的一个想法。

我的做法是否正确?
我在使用 UniCode 时遇到了问题,但现在应该已经解决了。

【问题讨论】:

    标签: sql sql-server passwords


    【解决方案1】:

    这是我运行此类密码检查的代码:

    --    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 个用户,所以脚本不是很快。

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 2022-06-12
      • 2015-08-28
      • 2014-12-03
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多