tencentdb_pwdcheck 是腾讯云自研的密码安全插件,提供三项能力:
·密码复杂度检查:创建用户或修改密码时,校验密码长度及大写字母、小写字母、数字、特殊字符的组成,不满足策略直接报错。
·认证失败延迟:密码认证失败时延迟响应,增加暴力破解成本。
·订阅语句密码脱敏:CREATE/ALTER SUBSCRIPTION 语句中的连接密码在日志等处自动脱敏为 ********,防止明文密码落入日志。
一、支持版本
| PostgreSQL 版本 | 支持版本 |
| PostgreSQL 10 | v10.17_r1.7及以上 |
| PostgreSQL 11 | v11.12_r1.6及以上 |
| PostgreSQL 12 | v12.7_r1.7及以上 |
| PostgreSQL 13 | v13.20_r1.23及以上 |
| PostgreSQL 14 | v14.17_r1.31及以上 |
| PostgreSQL 15 | v15.12_r1.17及以上 |
| PostgreSQL 16 | v16.8_r1.11及以上 |
| PostgreSQL 17 | v17.4_r1.5及以上 |
| PostgreSQL 18 | v18.0_r1.0及以上 |
注意:说明:
注意:你可在控制台实例详情页或执行 SHOW tencentdb_version; 查看当前实例的内核版本。
二、注意事项
·预加载插件:使用前请先在控制台参数设置页找到 shared_preload_libraries 参数,在其参数运行值中勾选 tencentdb_pwdcheck,保存后重启实例。
·默认不开启:加载插件后,还需在控制台参数设置页中开启参数 tencentdb_pwdcheck.enable_tencentdb_pwdcheck,密码检查才生效;订阅密码脱敏无需该开关,插件加载后即生效。
·超级用户不受约束:超级用户设置密码不受复杂度检查限制;管理员(tencentdb_superuser)与普通用户均受约束。
·仅接受明文密码:开启检查后,直接设置 md5 等已加密密码串将被拒绝。
三、参数说明
以下参数均为 SIGHUP 级,均可在控制台参数设置中修改,保存后自动生效,无需重启实例。
| 参数 | 默认值 | 说明 |
| tencentdb_pwdcheck.enable_tencentdb_pwdcheck | off | 密码检查与认证延迟的总开关 |
| tencentdb_pwdcheck.min_length | 8 | 密码最小长度 |
| tencentdb_pwdcheck.max_length | 32 | 密码最大长度 |
| tencentdb_pwdcheck.min_uppercase_number | 1 | 至少包含的大写字母个数 |
| tencentdb_pwdcheck.min_lowercase_number | 1 | 至少包含的小写字母个数 |
| tencentdb_pwdcheck.min_digit_number | 1 | 至少包含的数字个数 |
| tencentdb_pwdcheck.min_special_character_number | 1 | 至少包含的特殊字符个数 |
| tencentdb_pwdcheck.delay_milliseconds | 0 | 认证失败时的延迟毫秒数 |
有效特殊字符包括:()`~!@#$%^&*-+=_|{}[]:;'<>,.?/(不含反斜杠 \\)。密码中出现其他字符(如空格、中文)将被直接拒绝。
四、使用方法
以下示例假设实例中已有管理员 root(tencentdb_superuser 成员),业务用户为 app_user。
五、1. 开启密码检查
插件加载后,还需开启功能开关(SIGHUP 级参数,修改后无需重启实例)。该参数需在控制台修改:
1.1 登录 云数据库 PostgreSQL 控制台。
1.2 在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
1.3 选择参数设置。
1.4 搜索参数 tencentdb_pwdcheck.enable_tencentdb_pwdcheck,将其参数运行值修改为 on 并保存。
开启后,可通过以下语句确认参数状态:
postgres=# SHOW tencentdb_pwdcheck.enable_tencentdb_pwdcheck; tencentdb_pwdcheck.enable_tencentdb_pwdcheck———————————————- on(1 row)
未开启时,弱密码可正常设置(对照):
postgres=# CREATE USER app_user PASSWORD 'weak';CREATE ROLE
六、2. 密码复杂度校验效果
超级用户设置弱密码不受限制:
postgres=# ALTER USER app_user PASSWORD '123';ALTER ROLE
管理员设置密码时受策略约束,以下用例依次演示各类不合规密码的报错,以及合规密码通过:
root=> ALTER USER app_user PASSWORD 'asd';ERROR: Password too short. Minimum length is 8.root=> ALTER USER app_user PASSWORD 'abcdsdefg';ERROR: password need at least 1 uppercase letterroot=> ALTER USER app_user PASSWORD 'Aassdsaddb@';ERROR: password need at least 1 digitroot=> ALTER USER app_user PASSWORD 'Aassadasddb11';ERROR: password need at least 1 special characterroot=> ALTER USER app_user PASSWORD 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';ERROR: Password too long. Maximum length is 32.root=> ALTER USER app_user PASSWORD 'md5e589150ae7d28f93333afae92b36ef48';ERROR: Cannot use tencentdb_pwdcheck extension while using encrypted passwordroot=> ALTER USER app_user PASSWORD 'Aassadasddb11#$';ALTER ROLE
默认策略为:长度8 ~ 32,且至少包含1个大写字母、1个小写字母、1个数字、1个特殊字符。
七、3. 自定义密码策略
各策略参数均可在控制台参数设置中修改。下面以将最小密码长度从默认8调整为12为例进行演示:
3.1 登录 云数据库 PostgreSQL 控制台。
3.2 在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
3.3 选择参数设置。
3.4 搜索参数 tencentdb_pwdcheck.min_length,将其参数运行值修改为 12 并保存。
保存后策略立即生效,长度不足12的密码将被拒绝:
root=> ALTER USER app_user PASSWORD 'AAaa11$$';ERROR: Password too short. Minimum length is 12.root=> ALTER USER app_user PASSWORD 'AAaa11$$abcd';ALTER ROLE
八、4. 订阅语句密码脱敏
CREATE SUBSCRIPTION 语句的连接串中包含发布端密码。插件加载后,该语句在数据库日志、错误详情等位置展示时,密码自动脱敏。
执行一条订阅语句(发布端地址不可达,仅用于演示):
postgres=# CREATE SUBSCRIPTION sub_testCONNECTION 'host=127.0.0.1 port=1 dbname=postgres user=replicator password=Secret@123'PUBLICATION pub_test;ERROR: subscription "sub_test" could not connect to the publisher: connection to server at "127.0.0.1", port 1 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?
查看数据库日志(pg_log 目录),记录的语句中密码已脱敏为 ********:
2026-10-14 16:31:12.816 CST [4151291] LOG: statement: CREATE SUBSCRIPTION sub_test CONNECTION 'user=replicator password=******** dbname=postgres host=127.0.0.1 port=1' PUBLICATION pub_test;
ALTER SUBSCRIPTION 语句同样受脱敏保护。
九、5. 认证失败延迟
在控制台参数设置中将 tencentdb_pwdcheck.delay_milliseconds 设置为大于0的值后,密码认证失败的连接将延迟响应,用于增加暴力破解成本。实测(错误密码连接,delay 设为2000ms):延迟生效后单次失败连接耗时约2.010秒,未设置延迟(0ms)时约0.009秒。该参数仅影响认证失败的连接,正常登录无感知。
十、Q1:设置密码没有触发复杂度检查怎么排查?
A:请依次确认:shared_preload_libraries 参数已勾选 tencentdb_pwdcheck 并重启;tencentdb_pwdcheck.enable_tencentdb_pwdcheck 参数为 on;当前操作用户不是超级用户。
十一、Q2:为什么设置 md5 加密密码串会报错?
A:开启检查后插件只接受明文密码,由数据库完成加密存储,无法校验预先加密的密码串。
十二、Q3:密码中可以使用反斜杠吗?
A:不可以。反斜杠不在有效特殊字符范围内,包含反斜杠的密码将被拒绝。
十三、Q4:认证失败延迟会影响正常登录吗?
A:不会。延迟仅在密码认证失败时触发,认证成功的连接不产生任何延迟。
十四、相关参考
PostgreSQL 密码检查插件说明