记录python连接瀚高数据库使用psycopg2报认证问题psycopg2.OperationalError: authentication method 13 not supported

python使用psycopg2连接瀚高数据库报错psycopg2.OperationalError: authentication method 13 not supported

(venv) [root@sq4112----web reress]# python
Python 3.6.5 (default, Aug 26 2025, 17:38:10)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> conn=psycopg2.connect(dbname="db", user="user", password="pdw", host="127.0.0.1", port="5866")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: authentication method 13 not supported

这个报错的原因是因为瀚高默认的认证方式为sm3  而PostgreSQL的包psycopg2不支持这种认证方式

# "local" is for Unix domain socket connections only
local   all             all                                     sm3
# IPv4 local connections:
host    all             all             127.0.0.1/32            sm3
hostnossl all           all             127.0.0.1/32            sm3
hostssl all             all             127.0.0.1/32            cert
host    all             all             0.0.0.0/0               sm3
# IPv6 local connections:
host    all             all             ::1/128                 sm3
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     sm3
host    replication     all             127.0.0.1/32            sm3
host    replication     all             ::1/128                 sm3
 # Auto add
host    all             all             0.0.0.0/0               sm3
host    replication     all             0.0.0.0/0               sm3

解决思路

1.查看目前使用python包中用于访问数据库的模块的位置

[root@sq4112----web data]# find / -name *_psycopg*
/xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/psycopg2/_psycopg.py
/xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/psycopg2/__pycache__/_psycopg.cpython-36.pyc
/xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/psycopg2/_psycopg.cpython-36m-x86_64-linux-gnu.so
/xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/django/db/backends/postgresql_psycopg2

2.查看-gnu.so文件引用libpq.so.5的位置

[root@sq4112----web data]# ldd /xxxx/xxxx/xxxx/venv/lib/python3.6/site-packages/psycopg2/_psycopg.cpython-36m-x86_64-linux-gnu.so
        linux-vdso.so.1 (0x00007ffe03526000)
        libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fa6d52fb000)
        libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007fa6d52da000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x00007fa6d5122000)
        libssl.so.1.1 => /usr/lib64/libssl.so.1.1 (0x00007fa6d508e000)
        libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x00007fa6d4da4000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa6d57b4000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00007fa6d4d8a000)
        libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007fa6d4d83000)

3.发现libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fa6d52fb000)指向了/usr/lib64/libpq.so.5
4.用瀚高数据库libpq.so.5文件替换掉/usr/lib64/libpq.so.5, 瀚高的libpq.so.5文件在安装目录下的lib文件夹下
替换完成重新连接

(venv) [root@sq4112----web reress]# python
Python 3.6.5 (default, Aug 26 2025, 17:38:10)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> conn=psycopg2.connect(dbname="db", user="user", password="pwd", host="127.0.0.1", port="5866")
注意:
-------------------------------------------
Login User: sysdba
Login time: 2025-09-03 09:09:30.474615+08
Login Address: 127.0.0.1
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: infinity
-------------------------------------------

ok

posted @ 2025-09-03 09:18  JanWong  阅读(27)  评论(0)    收藏  举报