密码策略

在 Windows Server 2003 或更高版本中运行时,SQL Server 可以使用 Windows 密码策略机制。

SQL Server 可以对在 SQL Server 内部使用的密码应用在 Windows Server 2003 中使用的相同复杂性策略和过期策略。此功能需要通过 NetValidatePasswordPolicy API 实现,该 API 只在 Windows Server 2003 和更高版本中提供。

密码复杂性

密码复杂性策略通过增加可能密码的数量来阻止强力攻击。实施密码复杂性策略时,新密码必须符合以下原则:

  • 密码不得包含全部或部分用户帐户名。部分帐户名是指三个或三个以上两端用“空白”(空格、制表符、回车符等)或任何以下字符分隔的连续字母数字字符:逗号 (,)、句点 (.)、连字符 (-)、下划线 (_) 或数字符号 (#)。

  • 密码长度至少为八个字符。

  • 密码包含以下四类字符中的三类:

    • 拉丁文大写字母 (A - Z)

    • 拉丁文小写字母 (a - z)

    • 10 个基本数字 (0 - 9)

    • 非字母数字字符,如感叹号 (!)、美元符号 ($)、数字符号 (#) 或百分号 (%)。

密码最长可为 128 个字符。使用的密码应尽可能长,尽可能复杂。

密码过期

密码过期策略用于管理密码的使用期限。如果 SQL Server 实施密码过期策略,则系统将提醒用户更改旧密码,并禁用带有过期密码的帐户。

策略实施

可为每个 SQL Server 登录名单独配置密码策略实施。使用 ALTER LOGIN (Transact-SQL) 来配置 SQL Server 登录名的密码策略选项。配置密码策略实施时,适用以下规则:

  • 如果 CHECK_POLICY 改为 ON,则将出现以下行为:

    • 除非将 CHECK_EXPIRATION 显式设置为 OFF,否则也会将其设置为 ON。

    • 密码历史使用当前的密码哈希值初始化。

  • 如果 CHECK_POLICY 改为 OFF,则将出现以下行为:

    • CHECK_EXPIRATION 也设置为 OFF。

    • 清除密码历史。

    • lockout_time 的值被重置。

不支持策略选项的某些组合。

  • 如果指定 MUST_CHANGE,则 CHECK_EXPIRATION 和 CHECK_POLICY 必须设置为 ON。否则,该语句将失败。

  • 如果 CHECK_POLICY 设置为 OFF,则 CHECK_EXPIRATION 不能设置为 ON。包含此选项组合的 ALTER LOGIN 语句将失败。

    重要说明重要提示

    只有在 Windows Server 2003 及更高版本上才会强制执行 CHECK_EXPIRATION 和 CHECK_POLICY。

    重要说明重要提示

    Windows Server 2003 中的已知问题可以防止错误密码计数在达到 LockoutThreshold 后重置。这可能会导致在后续登录尝试失败后立即锁定。可以通过暂时设置 CHECK_POLICY = OFF,然后设置 CHECK_POLICY = ON 来手动重置错误的密码计数。

当 SQL Server 在 Windows 2000 中运行时,设置 CHECK_POLICY = ON 将禁止创建以下类型的密码:

  • 为 NULL 或空

  • 与计算机名或登录名相同

  • 下列任意项:“password”、“admin”、“administrator”、“sa”、“sysadmin”

可以在 Windows 中设置安全策略,也可以从域接收安全策略。若要查看计算机上的密码策略,请使用本地安全策略 MMC 管理单元 (secpol.msc)。