记录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

浙公网安备 33010602011771号