CentOS7执行airflow db init报airflow用户Ident认证失败如何解决
故障核心原因
CentOS 7 yum源安装的PostgreSQL 9.2.24默认配置中,本地连接的认证规则采用ident模式:该模式会校验发起数据库连接的操作系统用户名和连接使用的数据库用户名是否完全一致,校验通过才允许连接,全程不会校验你配置里写的数据库密码。
你之前能通过psql正常查询airflow用户和对应数据库,基本都是切换到postgres系统用户下操作的,该系统用户和数据库内置的postgres超级用户同名,可直接通过ident校验,不代表账号密码认证链路正常。运行airflow db init时,你用的是当前操作的系统用户(非airflow同名系统用户)去连接数据库的airflow账号,直接被ident规则拦截,就会抛出该报错。
分步解决操作
- 第一步:修改pg_hba.conf认证规则
yum安装的PostgreSQL 9.2默认配置文件路径为/var/lib/pgsql/9.2/data/pg_hba.conf,如果路径不对可以执行find / -name pg_hba.conf全局搜索定位。
打开文件找到以下3条默认的本地连接规则:
将3行规则末尾的local all all ident host all all 127.0.0.1/32 ident host all all ::1/128 identident统一修改为md5(PostgreSQL 9.2版本不支持scram-sha-256认证,用md5即可),修改后规则如下:
注意:pg_hba.conf的规则是从上到下匹配生效,不要把修改后的规则放在其他未调整的ident规则后面,否则配置不生效。local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 md5 - 第二步:重启PostgreSQL服务让配置生效
执行以下命令重启服务并校验状态:
确认服务状态为systemctl restart postgresql-9.2 systemctl status postgresql-9.2active (running)即可。 - 第三步:校验airflow账号密码有效性
切换到postgres系统用户,重新设置airflow数据库账号的密码,避免之前建用户时漏设密码:
退出postgres用户后,直接在当前操作的系统用户下执行连接测试命令:su - postgres psql -c "ALTER USER airflow WITH PASSWORD 'airflow';" exit
如果命令能正常返回数据库列表,说明认证链路已经打通。psql "postgresql://airflow:airflow@localhost:5432/airflow" -c "\l" - 第四步:重新执行Airflow初始化
回到airflow运行用户下,重新执行airflow db init即可正常完成初始化。
避坑提醒
- 不要图省事把认证规则改成
trust,该模式允许任意本地用户无密码连接数据库,存在严重安全隐患,哪怕测试环境也不建议使用。 - PostgreSQL 9.2版本已经结束官方生命周期支持,存在已知安全漏洞和兼容性问题,生产环境建议升级到仍在维护的稳定版本。
内容的提问来源于stack exchange,提问作者Kulasangar
相关产品推荐
相关产品推荐

