--在使用pg中登陆数据库是第一步,其代码结构如下:
--原始代码在如下文件中
src/backend/libpq/auth.c
--其入口函数为ClientAuthentication,其接受一个Port结构体
void
ClientAuthentication(Port *port)
{
--通过此函数解析客户的ip类型,确定其使用的是什么样的方式进行认证,比如能过local还是ip,是md5还是trust认证等
-- hba_getauthmethod 会调用函数 check_hba()
hba_getauthmethod(port);
CHECK_FOR_INTERRUPTS();
--匹配pg的认证方法,比如我们最常用的md5
switch (port->hba->auth_method)
{
case uaReject:
case uaMD5:
if (Db_user_namespace)
ereport(FATAL,
(errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
errmsg("MD5 authentication is not supported when \"db_user_namespace\" is enabled")));
--提示用户输入密码并对用户输入的密码进行加密
sendAuthRequest(port, AUTH_REQ_MD5);
--比较用户输入的密码与数据库中存在的密码是否一致,其会调用md5_crypt_verify函数
status = recv_and_check_password_packet(port, &logdetail);
break;
}
--检查系统中中是否有hook,如果有,则调用
postgresql 源码客户端认证
最新推荐文章于 2024-06-18 09:41:22 发布