在 RDS for SQL Server 上为 SQL Server 登录名使用密码策略 - Amazon Relational Database Service

在 RDS for SQL Server 上为 SQL Server 登录名使用密码策略

Amazon RDS 支持您为运行 Microsoft SQL Server 的 Amazon RDS 数据库实例设置密码策略。使用这一点为使用 SQL Server 身份验证对数据库实例进行身份验证的登录名设置复杂性、长度和锁定要求。

关键术语

登录

在 SQL Server 中,可以对数据库实例进行身份验证的服务器级主体称为登录名。其它数据库引擎可能会将此主体称为用户。在 RDS for SQL Server 中,登录名可以使用 SQL Server 身份验证或 Windows 身份验证进行身份验证。

SQL Server 登录名

使用用户名和密码通过 SQL Server 身份验证进行身份验证的登录名是 SQL Server 登录名。您通过数据库参数配置的密码策略仅适用于 SQL Server 登录名。

Windows 登录名

基于 Windows 主体并使用 Windows 身份验证进行身份验证的登录名是 Windows 登录名。您可以在 Active Directory 中为 Windows 登录名配置密码策略。有关更多信息,请参阅 将 Active Directory 用于 RDS for SQL Server

为每个登录名启用和禁用策略

每个 SQL Server 登录名都有用于 CHECK_POLICYCHECK_EXPIRATION 的标志。默认情况下,创建新登录名时,CHECK_POLICY 设置为 ON,而 CHECK_EXPIRATION 设置为 OFF

如果为登录名启用 CHECK_POLICY,则 RDS for SQL Server 会根据复杂性和最小长度要求验证密码。锁定策略也适用。用于启用 CHECK_POLICYCHECK_EXPIRATION 的示例 T-SQL 语句:

ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;

如果启用 CHECK_EXPIRATION,则密码受密码使用期限策略的约束。用于检查是否设置了 CHECK_POLICYCHECK_EXPIRATION 的 T-SQL 语句:

SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;

密码策略参数

所有密码策略参数都是动态的,不需要重启数据库即可生效。下表列出了您可以设置来修改 SQL Server 登录名的密码策略的数据库参数:

数据库参数 描述 允许的值 默认值
rds.password_complexity_enabled 创建或更改 SQL Server 登录名的密码时,必须满足密码复杂性要求。必须满足以下约束:
  • 密码必须包含以下三个类别的字符:

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

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

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

  • 密码不包含用户的账户名称。

0、1 0
rds.password_min_length SQL Server 登录名的密码中所需的最小字符数。 0-14 0
rds.password_min_age 用户在更改 SQL Server 登录名密码之前必须使用该密码的最少天数。当设置为 0 时,可以立即更改密码。 0-998 0
rds.password_max_age

可以使用 SQL Server 登录名密码的最大天数,之后用户需要更改密码。设置为 0 时,密码从不过期。

0-999 42
rds.password_lockout_threshold 导致 SQL Server 登录名被锁定的连续失败登录尝试次数。 0-999 0
rds.password_lockout_duration 锁定的 SQL Server 登录名在被解锁之前必须等待的分钟数。 1-60 10
rds.password_lockout_reset_counter_after 登录尝试失败后必须经过的分钟数,之后才会将失败的登录尝试计数器重置为 0。 1-60 10
注意

有关 SQL Server 密码策略的更多信息,请参阅密码策略

密码复杂性和最小长度策略也适用于所包含的数据库中的数据库用户。有关更多信息,请参阅包含的数据库

以下约束适用于密码策略参数:

  • 除非 rds.password_max_age 设置为 0,否则 rds.password_min_age 参数必须小于 rds.password_max_age parameter

  • rds.password_lockout_reset_counter_after 参数必须小于或等于 rds.password_lockout_duration 参数。

  • 如果 rds.password_lockout_threshold 设置为 0,则 rds.password_lockout_durationrds.password_lockout_reset_counter_after 不适用。

现有登录名的注意事项

修改实例上的密码策略后,不会根据新的密码复杂性和长度要求对登录名的现有密码进行追溯性评估。只有新密码才会根据新策略进行验证。

SQL Server 确实会根据使用期限要求评估现有密码。

修改密码策略后,密码可能会立即过期。例如,如果登录名已启用 CHECK_EXPIRATION,其密码上次更改是在 100 天前,并且您将 rds.password_max_age 参数设置为 5 天,则密码将立即过期,并且登录名需要在下次尝试登录时更改其密码。

注意

RDS for SQL Server 不支持密码历史记录策略。历史记录策略可禁止登录名重用以前用过的密码。

多可用区部署的注意事项

多可用区实例的失败登录尝试计数器和锁定状态不会在节点之间复制。如果在多可用区实例失效转移时登录名被锁定,则登录名可能已经在新节点上被解锁。