暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

循序渐进丨免密登录 openGauss / MogDB 的几种方式

MogDB 2024-07-31
350
在日常使用中,我们有时候会希望不输入密码即可登录数据库。本文总结一下免密登录 openGauss MogDB 的几种方式。

1

初始用户本地免密登录

这一种是最常见的,也是免配置默认就能做到的,即用初始化并启动 openGauss MogD的操作系统用户直接登录:
    gsql
    gsql ((MogDB 3.1.1.100 build 501a8955) compiled at 2023-07-03 19:59:26 commit 0 last mr 1796 )
    Non-SSL connection (SSL connection is recommended when requiring high-security)
    Last login: 2023-08-16 15:08:17.350982+08 from gs_clean@::1
    Type "help" for help.


    MogDB=#

    2

    本地非初始用户免密登录

    在本地操作系统,也可以通过一定的配置,让其他操作系统用户以初始用户的身份通过unix_socket免密登录数据库。
    假设:
      • 初始用户是 ommxxx

      • 其他操作系统用户数testxxx,为了安全,此用户和初始用户在同一操作系统用户组下

      • unix_socket目录为 data/xxx/tmp

      • 监听端口为 44000

    2.1 配置unix_socket目录及文件权限

    修改postgresql.conf:
      #postgresql.conf
      ...
      unix_socket_directory=/data/xxx/tmp
      unix_socket_permision=0770
      ...
      操作系统赋予组控制权限:
        chmod 0770 data/xxx/tmp

        2.2 配置pg_hba.conf

        去掉local … trust;

        增加local … peer map=mymap,当然,这里的mymap是可变的,和下一个修改对应即可:

          #pg_hba.conf
          ...
          #local all all trust
          local all all peer map=mymap
          ...

          2.3 配置pg_ident.conf

          注意,首列是pg_hba.conf配置中的map=mymap里的mymap可以根据需要两边同时改;同时,记得增加一个初始用户–初始用户的对应,否则初始用户没法登录:
            # pg_ident.conf
            # MAPNAME SYSTEM-USERNAME PG-USERNAME
            mymap ommxxx ommxxx
            mymap testxxx ommxxx

            2.4 重启数据库

              gs_ctl restart

              2.5 其他操作系统用户即可免密登录

                [testxxx@node156 ~]$ gsql -r -h /data/xxx/tmp -p 44000 -Uommxxx -d postgres
                gsql ((MogDB 3.1.1.100 build 501a8955) compiled at 2023-07-03 19:59:26 commit 0 last mr 1796 )
                Non-SSL connection (SSL connection is recommended when requiring high-security)
                Last login: 2023-08-16 15:28:07.131802+08 from gs_clean@::1
                Type "help" for help.
                当然,需要有对应gsql执行权限(PATH/LD_LIBRARY_PATH),可以是独立安装的,也可以是借用初始用户安装好的。

                3

                SSL免密登录

                通过SSL认证证书也可以进行免密登录。
                假设:
                  • 需免密登录用户为 testssl

                  • 客户端ip为 172.16.3.250

                  • 服务器ip为 172.16.3.156

                  • 数据监听端口为 61234

                3.1 生成SSL认证文件

                把数据库安装目录下的openssl.cnf拷到当前目录下:
                  cp $GAUSSHOME/share/sslcert/gsql/openssl.cnf .

                  生成SSL CA

                    openssl req -new -x509 -days 9999 -nodes -config openssl.cnf \
                    -out CA.crt -keyout CA.key -subj "/CN=CA"
                    此操作生成两个文件 CA.crt 和 CA.key。

                    生成服务器key

                      openssl req -new -nodes -text -config openssl.cnf \
                      -out server.csr -keyout server.key -subj "/CN=server"
                      openssl x509 -req -text -days 9999 -CA CA.crt -CAkey CA.key -CAcreateserial \
                      -in server.csr -out server.crt

                      生成客户端key

                      注意,这里的 “/CN=testssl” 必须为数据库里的用户名,也可根据需要生成多个文件,对应多个可登录用户。为了方便区分,文件名(testssl.*)也使用用户名为前缀:
                        openssl req -new -nodes -text -config openssl.cnf  \
                        -out testssl.csr -keyout testssl.key -subj "/CN=testssl"
                        openssl x509 -req -text -days 9999 -CA CA.crt -CAkey CA.key -CAcreateserial \
                        -in testssl.csr -out testssl.crt

                        3.2 数据库创建对应用户

                          gsql -r -c "create user testssl password 'test@123';"

                          3.3 修改数据库参数

                          把CA.*、server.*拷到$PGDATA,理论上也可放在其他合适的目录下,目录权限为0600,但下面的配置得写全路径。
                          修改postgresql.conf:
                            # postgresql.conf
                            ssl=on
                            ssl_cert_file= 'server.crt'
                            ssl_key_file= 'server.key'
                            ssl_ca_file='CA.crt'
                            修改pg_hba.conf:
                              # pg_hba.conf
                              ...
                              hostssl all all 172.16.3.250/32 cert
                              根据需要,也可把172.16.3.250/32改为需要的网段。
                              重启数据库:
                                gs_ctl restart

                                3.4 客户端可通过SSL认证文件免密登录

                                将 CA.*、testssl.*传输到对应客户端主机某目录下,这里选用/tmp。

                                方式1:在gsql命令行加入几个SSL文件的对应关系

                                  gsql "sslrootcert=/tmp/CA.key sslcert=/tmp/testssl.crt sslkey=/tmp/testssl.key" \
                                  -h 172.16.3.156 -p 61234 -U testssl

                                  方式2:设置SSL变量后登录

                                    export PGSSLROOTCERT=/tmp/CA.crt
                                    export PGSSLCERT=/tmp/testssl.crt
                                    export PGSSLKEY=/tmp/testssl.key
                                    gsql -h172.16.3.156 -p61234 -Utestssl
                                    gsql ((MogDB 3.0.3 build 23ba838d) compiled at 2022-10-22 09:50:39 commit 0 last mr )
                                    SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
                                    Type "help" for help.

                                    4

                                    以PG客户端psql进行免密登录

                                    除了上述的三种以外,其实还有一种方法,就是使用PG客户端psql进行免密登录,但这个所谓免密是事先把密码写在客户端的配置文件或者环境变量中,对于服务器端来说,其实是接收到密码的,具体可参考此文章:
                                    https://www.modb.pro/db/81998(复制链接至浏览器查阅)


                                    关于作者

                                    罗海雄,云和恩墨数据库研发架构师,性能优化专家,2012年 ITPUB 全国SQL大赛冠军。他拥有超十年企业级系统设计与优化经验,对SQL优化理解尤其深入,曾服务于甲骨文公司。

                                    END


                                    MogDB 是云和恩墨基于 openGauss 开源内核进行增强提升,推出的一款安稳易用的企业级关系型数据库。其具备金融级高可用和全密态计算的极致安全、面向多核处理器的极致性能、AI自诊断调优的极致智能能力,能够满足从核心交易到复杂计算的企业级业务需求。

                                    访问官网了解更多:www.mogdb.io

                                    产品兼容适配申请:partner@enmotech.com

                                    加微信进入交流群:Roger_database

                                    文章转载自MogDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论