FGPP 的 Precedence 是整数(1–1000),值越小优先级越高,AD 从中选取最小值对应的 PSO 生效;必须唯一,不可修改,仅对全局/通用安全组生效,用户需重新登录才能应用。
ad 中的 fgpp 本身不涉及“优先级映射”这种网络 qos 概念,它用的是 策略优先级(precedence),用于决定多个 pso 同时匹配同一用户时,哪个策略生效。这不是字段转换或报文标记,而是 ad 内部对密码策略对象的排序机制。
理解 FGPP 的 Precedence 值
Precedence 是一个整数(1–1000),值越小,优先级越高。AD 在评估用户适用的密码策略时,会检查所有绑定到该用户的 PSO,取其中 Precedence 最小的那个作为最终生效策略。
- 默认域策略(Default Domain Policy)始终存在,但它的优先级最低——它只对未被任何 PSO 覆盖的用户生效
- 若用户同时属于两个安全组,而这两个组分别绑定了 Precedence=20 和 Precedence=5 的 PSO,则只有 Precedence=5 的策略起作用
- Precedence 必须唯一:不能有两个 PSO 设置相同的值,否则后创建的无法保存(AD 会报错)
设置和验证 Precedence 的关键操作
Precedence 在创建 PSO 时指定,之后不可直接修改(需删除重建)。务必在部署前规划好层级关系:
- 建议预留数值区间:例如管理员用 1–10,服务账户用 11–20,高权限外包人员用 21–30,便于后续扩展
- 用 PowerShell 创建时必须显式指定 -Precedence 参数:New-ADFineGrainedPasswordPolicy -Name "PSO-Privileged" -Precedence 5 -MinPasswordLength 16 …
- 用 ADSI Edit 手动创建时,在 msDS-PasswordSettings 对象属性中填写 msDS-PasswordSettingsPrecedence 字段(纯数字,无单位)
- 验证当前用户实际匹配的 PSO:运行 Get-ADUserResultantPasswordPolicy -Identity username,返回结果中的 Precedence 值即为生效策略的优先级
常见冲突与排查要点
Precedence 设错是 FGPP 不生效的首要原因:
- 检查是否误将普通通讯组或嵌套组成员作为主体——FGPP 只认全局/通用安全组(groupType & 0x80000000),且不递归解析嵌套关系
- 确认目标用户对象的 msDS-PSOApplied 属性中,只包含你期望的那个 PSO 的完整 DN;若存在多个,AD 自动选最小 Precedence 的那个
- PowerShell 中用 Get-ADFineGrainedPasswordPolicy -Filter * | Sort-Object Precedence | ft Name,Precedence 查看全部 PSO 的优先级分布,避免重复或跳空
- 策略变更后无需强制刷新组策略,但用户需重新登录(或等待 Kerberos TGT 刷新,约 10 小时)才能加载新 PSO










