sql:如何测试密码强度

时间:2014-02-12 10:13:21

标签: sql sql-server sql-server-2012

如何使用SQL测试密码强度?

我有一个带密码的遗留表,我需要在SSMS中检查测试密码强度一次并更正它们。

当前系统的要求是:

  1. 至少2个小写字符(abcdefg ...
  2. 至少2个大写字符(ABCDEFG ...
  3. 至少2个数字(123456 ...
  4. 至少2个狂野字符(~!@#$%^& ...
  5. 最小长度必须为8个字符
  6. 谢谢

1 个答案:

答案 0 :(得分:2)

正如其他人所提到的,这种检查更适合负责将数据写入数据库的应用程序。一个原因是SQL对于高级字符串操作来说是完全可怕的。

但如果你真的必须使用SQL,那么这样的事情应该指向正确的方向:

SELECT Password,
    CASE WHEN 
        Password COLLATE Latin1_General_BIN LIKE '%[a-z]%[a-z]%' AND
        Password COLLATE Latin1_General_BIN LIKE '%[A-Z]%[A-Z]%' AND
        Password LIKE '%[0-9]%[0-9]%' AND
        Password LIKE '%[~!@#$%^&]%[~!@#$%^&]%' AND
        LEN(Password) >= 8
    THEN 1 ELSE 0 END AS Valid
FROM TableWithPasswords

"有效"如果密码满足CASE语句的条件,则列将包含1,否则为0。如果你想在第4个要求中添加更多特殊字符,请记住正确地逃避它们,根据:http://technet.microsoft.com/en-us/library/ms179859.aspx

注意COLLATE语句 - 这是为了确保对LIKE运算符进行区分大小写的比较。