postgresql 源码客户端认证

本文深入解析了PostgreSQL数据库的客户端认证过程,从`ClientAuthentication`函数入手,介绍了如何解析客户端IP类型并确定认证方式,如MD5或Trust。通过`check_hba`函数遍历`pg_hba.conf`配置文件,匹配合适的认证记录。同时,文章详细讲解了密码验证过程,包括获取系统缓存的密码并与用户输入的密码进行加密比对。最后,讨论了用户密码的有效期检查。
摘要由CSDN通过智能技术生成
--在使用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值