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.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.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 refusedIs 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_testCONNECTION '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:不会。延迟仅在密码认证失败时触发,认证成功的连接不产生任何延迟。