PostgreSQL参数authentication_timeout

PostgreSQL 提供一个参数 authentication_timeout,表示允许完成客户端身份验证的最长时间。如果潜在的客户端在这么长的时间内没有完成身份验证协议,那么服务器将关闭连接。这样做的目的是可以防止挂起的客户端无限期地占用连接。如果指定该值时不使用单位,则以秒为单位。默认值为一分钟(1min)。此参数只能在 postgresql.conf 配置文件或服务器启动的命令行中设置。

  • 默认值 60 秒
  • 最小值 1 秒
  • 最大值 600 秒
  • 只能在配置文件 postgresql.conf 或者命令行中修改

在内核实现上,有两个地方使用到了 authentication_timeout 参数的值。

  1. startup 阶段,即 backend 进程初始化阶段,调用 ProcessStartupPacket() 函数处理客户端发来的 startup packet 启动消息包的时候,该函数的调用有可能超时,如果超时将会导致 backend 进程调用 proc_exit(1) 函数退出。
  2. authentication 阶段,即身份验证阶段,调用 ClientAuthentication() 函数对客户端的身份进行验证,此时 backend 进程显示的状态为 authentication(通过 ps 命令可查看),身份认证可能会超时,如果超时将会给 backend 进程发送信号 SIGTERM,使 backend 进程退出。

文章评论

0条评论