密码策略

适用于:SQL Server (所有受支持的版本)

SQL Server 可以使用 Windows 密码策略机制。 密码策略应用于使用 SQL Server 身份验证的登录名,并且应用于具有密码的包含数据库用户。

SQL Server 可以对在 SQL Server内部使用的密码应用在 Windows 中使用的相同复杂性策略和过期策略。 此功能取决于 NetValidatePasswordPolicy API。

注意

Azure SQL数据库强制实施密码复杂性。 密码过期和策略强制部分不适用于Azure SQL数据库。

密码复杂性

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

  • 密码不得包含用户的帐户名。

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

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

    • 拉丁文大写字母 (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 语句将失败。

  • 设置 CHECK_POLICY = ON 将禁止创建以下类型的密码:

    • 为 NULL 或空

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

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

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

CREATE LOGIN (Transact-SQL)

ALTER LOGIN (Transact-SQL)

CREATE USER (Transact-SQL)

ALTER USER (Transact-SQL)

创建登录名

创建数据库用户

强密码