credcheck
明文凭证检查器
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
credcheck | 4.6 | SEC | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7310 | credcheck | 否 | 是 | 是 | 是 | 否 | 否 | - |
| 相关扩展 | passwordcheck_cracklib login_hook passwordcheck pgaudit pg_auth_mon set_user auth_delay pg_permissions |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 4.6 | 1817161514 | credcheck | - |
| RPM | PGDG | 4.6 | 1817161514 | credcheck_$v | - |
| DEB | PGDG | 4.6 | 1817161514 | postgresql-$v-credcheck | - |
安装
您可以直接安装 credcheck 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install credcheck; # 当前活跃 PG 版本安装
pig ext install -y credcheck -v 18 # PG 18
pig ext install -y credcheck -v 17 # PG 17
pig ext install -y credcheck -v 16 # PG 16
pig ext install -y credcheck -v 15 # PG 15
pig ext install -y credcheck -v 14 # PG 14
dnf install -y credcheck_18 # PG 18
dnf install -y credcheck_17 # PG 17
dnf install -y credcheck_16 # PG 16
dnf install -y credcheck_15 # PG 15
dnf install -y credcheck_14 # PG 14
apt install -y postgresql-18-credcheck # PG 18
apt install -y postgresql-17-credcheck # PG 17
apt install -y postgresql-16-credcheck # PG 16
apt install -y postgresql-15-credcheck # PG 15
apt install -y postgresql-14-credcheck # PG 14
预加载配置:
shared_preload_libraries = 'credcheck';
创建扩展:
CREATE EXTENSION credcheck;
用法
credcheck 在 CREATE ROLE、ALTER ROLE 和密码修改时,强制执行可配置的用户名和密码强度规则。它还支持密码重用策略和认证失败封禁。
配置参数
添加到 postgresql.conf:
shared_preload_libraries = 'credcheck'
用户名检查
| 参数 | 描述 | 示例 |
|---|---|---|
credcheck.username_min_length | 用户名最小长度 | 4 |
credcheck.username_min_special | 最少特殊字符数 | 1 |
credcheck.username_min_digit | 最少数字字符数 | 1 |
credcheck.username_min_upper | 最少大写字符数 | 2 |
credcheck.username_min_lower | 最少小写字符数 | 1 |
credcheck.username_min_repeat | 相邻最大重复字符数 | 2 |
credcheck.username_contain | 必须包含其中一个字符 | a,b,c |
credcheck.username_not_contain | 不得包含这些字符 | x,y,z |
credcheck.username_contain_password | 用户名不得包含密码 | on |
密码检查
| 参数 | 描述 | 示例 |
|---|---|---|
credcheck.password_min_length | 密码最小长度 | 8 |
credcheck.password_min_special | 最少特殊字符数 | 1 |
credcheck.password_min_digit | 最少数字字符数 | 1 |
credcheck.password_min_upper | 最少大写字符数 | 1 |
credcheck.password_min_lower | 最少小写字符数 | 1 |
credcheck.password_min_repeat | 相邻最大重复字符数 | 3 |
credcheck.password_contain_username | 密码不得包含用户名 | on |
credcheck.password_valid_until | VALID UNTIL 最少天数 | 60 |
credcheck.password_valid_max | VALID UNTIL 最大天数 | 365 |
credcheck.whitelist | 不受检查约束的用户名 | admin,super |
使用示例
-- 拒绝:用户名太短
CREATE USER abc WITH PASSWORD 'pass';
-- ERROR: username length should match the configured credcheck.username_min_length
-- 拒绝:密码包含用户名
CREATE USER abcd$ WITH PASSWORD 'abcd$xyz';
-- ERROR: password should not contain username
密码重用策略
SET credcheck.password_reuse_history = 2;
SET credcheck.password_reuse_interval = 365; -- 天
查看密码历史:
SELECT rolename, password_hash FROM pg_password_history;
认证失败封禁
SET credcheck.max_auth_failure = 3; -- 3次失败后封禁
重置被封禁的用户:
SELECT pg_banned_role_reset(); -- 重置所有
SELECT pg_banned_role_reset('username'); -- 重置特定用户