使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

这篇具有很好参考价值的文章主要介绍了使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 使用 命令安装 安装 psycopg2

pip3 install psycopg2

  1. 编写python文件 test2.py,连接数据库。

import psycopg2

#创建连接对象

conn=psycopg2.connect(dbname="db_tpcc",user="tpcc_user",password="password",host="10.201.65.207",port=30100)

cur=conn.cursor() #创建指针对象

#创建连接对象(SSl连接)

#conn = psycopg2.connect(dbname="db_tpcc", user="tpcc_user", password="password", host="10.201.65.207", port=30100,sslmode="verify-ca", sslcert="client.crt",sslkey="client.key.unsecure",sslrootcert="ca.pem")

cur=conn.cursor() #创建指针对象

# 创建表

cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")

#插入数据

cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Aspirin','M'))

cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Taxol','F'))

cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(3,'Dixheral','M'))

# 获取结果

cur.execute('SELECT * FROM student')

results=cur.fetchall()

print (results)

# 关闭连接

conn.commit()

cur.close()

conn.close()

  1. 运行test2.py 报错

conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

psycopg2.OperationalError: connection to server at "10.201.65.207", port 30100 failed: none of the server's SASL authentication mechanisms are supported

  1. 大部分程序猿采用如下方法解决

A.执行命令修改加密参数 gs_guc reload -N all -I all -c "password_encryption_type=1";

B.修改数据库每台机器的pg_hba.conf文件

切换到你们那边的gaussdb用户,在所有DN节点都要修改如下内容

cd /data/cluster/data/dn/dn_6001(目录改成你那边的)

vi pg_hba.conf ,将下图标注的sha256改为md5

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

C.改完重启数据库

停止:gs_om -t stop

启动:gs_om -t start

D.修改了加密方式,以前创建的用户都不能登录,使用超级用户RsAdmin免密登录,使用下面的命令修改用户密码

执行 alter user test_user3 identified by 'password'

MD5这种加密方式,是不安全的加密方式,华为官方也不推荐.我们下面讨论,不修改高斯数据库加密方式的前提下处理问题

  1. 华为官网https://opengauss.org/zh/download/下载对应版本的Python-psycopg2_3.1.1,目前只支持LINUX系统,还不支持WINDOWS

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

下载后文件名如下openGauss-3.1.1-openEuler-aarch64-Python.tar.gz

  1. 将包上传到 LINUX 的任意目录下,这里为 /setup/openGauss,并解压

tar -zxvf openGauss-3.1.1-openEuler-aarch64-Python.tar.gz

解压后目录结构如下

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法
  1. 将依赖的lib 文件复制到/usr/lib64

cp lib/* /usr/lib64

这里提示是否覆盖,全部选否

  1. 将psycopg2文件夹 copy 到 /usr/lib/python3.7/site-packages 并授权

如果不知道 site-packages的路径,使用下面的命令查找

find /usr -name *site-p*

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

cp -r /setup/openGauss/psycopg2 /usr/lib/python3.7/site-packages/

chmod -R 755 /usr/lib/python3.7/site-packages/psycopg2

  1. 拿step2编写的test2文件运行,运行成功

python3 test2.py文章来源地址https://www.toymoban.com/news/detail-447881.html

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法
使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

这里我们的连接方式使用的是明文方式,绕过了 pip install psycopg2 的MD5 加密方式

conn=psycopg2.connect(dbname="db_tpcc",user="tpcc_user",password="password",host="10.201.65.207",port=30100)

  1. 为了更安全的网络连接,我们应该使用证书的链接方式

注释掉明文链接,使用下面的连接方式

conn = psycopg.connect(dbname="db_tpcc", user="tpcc_user", password="password", host="10.201.65.207", port=30100,sslmode="verify-ca", sslcert="client.crt",sslkey="client.key",sslrootcert="ca.pem")

  1. 登录高斯数据库服务器端,并编写 client 端生成脚本genCertificate_client.sh

vim /setup/genCertificate_client.sh

脚本内容如下:

curDir=/setup

logFile=genCertificate.log

user_pwd=password #这里配置为客户端运行python程序的用户密码

function genCertificate()

{

echo "Start to genCertificate" >> ${logFile}

openssl=$(openssl version)

ca_dir=$(awk '/Where everything is kept/{print $3}' /etc/pki/tls/openssl.cnf)

if [ -z "${openssl}" -o -z "${ca_dir}" ]; then

echo "genCertificate failed: openssl is not installed" >> ${logFile}

exit 1

fi

mkdir -p ${curDir}/certificate

cd ${curDir}/certificate

if [ "${string:0:1}" == "." ]; then

ca_dir=${curDir}/certificate/${ca_dir}

fi

mkdir -p ${ca_dir}/newcerts

touch ${ca_dir}/index.txt

sed -i "s/^unique_subject =.*/unique_subject = no/" ${ca_dir}/index.txt.attr

echo '01' >> ${ca_dir}/serial

# openssl genrsa -out ca.key 2048

# expect <<-EOF

# spawn openssl req -new -key ca.key -out ca.csr

# expect "Country Name" {send "CN\r"}

# expect "State or Province Name" {send "GD\r"}

# expect "Locality Name" {send "SZ\r"}

# expect "Organization Name" {send "HW\r"}

# expect "Organizational Unit Name" {send "OM\r"}

# expect "Common Name" {send "GAUSS\r"}

# expect "Email Address" {send "\r"}

# expect "A challenge password" {send "\r"}

# expect "An optional company name" {send "\r"}

# expect "]#" {send "\r"}

#EOF

# openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

expect <<-EOF

spawn clear

spawn openssl genrsa -des3 -out client.key 2048

expect "Enter pass phrase for client.key:"

send "${user_pwd}\r"

expect "Verifying - Enter pass phrase for client.key:"

send "${user_pwd}\r"

send "\r"

expect "]#" {send "\r"}

EOF

expect <<-EOF

spawn openssl req -new -key client.key -out client.csr

expect "Enter pass phrase for client.key" {send "${user_pwd}\r"}

expect "Country Name" {send "CN\r"}

expect "State or Province Name" {send "GD\r"}

expect "Locality Name" {send "SZ\r"}

expect "Organization Name" {send "HW\r"}

expect "Organizational Unit Name" {send "OM\r"}

expect "Common Name" {send "GAUSS\r"}

expect "Email Address" {send "\r"}

expect "A challenge password" {send "\r"}

expect "An optional company name" {send "\r"}

expect "]#" {send "\r"}

EOF

expect <<-EOF

spawn openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

expect "Sign the certificate" {send "y\r"}

expect "certificate requests certified" {send "y\r"}

expect "]#" {send "\r"}

EOF

openssl x509 -in ca.crt -out ca.pem

if [ ! -s ${curDir}/certificate/ca.pem -o ! -s ${curDir}/certificate/client.crt -o ! -s ${curDir}/certificate/client.key ]; then

echo "genCertificate failed, please execute \"sh ${curDir}/install_cluster.sh genCertificate\" cmd for details" >> ${logFile}

exit 1

fi

echo "genCertificate finished, begin to deliver it to all nodes" >> ${logFile}

cat client.crt > client.pem

shift

while [ $# != 0 ]; do

echo "Start to deliver cert to $1" >> ${logFile}

scpCmd="scp -q ${curDir}/certificate/ca.pem ${curDir}/certificate/client.key ${curDir}/certificate/client.pem root@$1:/home/${user}/sslcrt"

executeRemoteCmd "${scpCmd}" ${root_pwd}

sshCmd="ssh -t root@$1 \"chown -R ${user}:${user_group} /home/${user}/sslcrt\""

executeRemoteCmd "${sshCmd}" ${root_pwd}

shift

done

echo "End to genCertificate" >> ${logFile}

}

genCertificate

  1. 赋予脚本执行权限,并copy 高斯安装目录下的certificate目录到setup目录下

chmod +x /setup/genCertificate_client.sh

cp -r /data/GaussDBInstaller/certificate /setup/

  1. 运行脚本genCertificate_client.sh

./genCertificate_client.sh

  1. 从python程序的客户端运行 scp 命令,copy 文件到 test2.py的目录下

scp 10.201.65.207:/setup/certificate/ca.pem /setup/

scp 10.201.65.207:/setup/certificate/client.key /setup/

scp 10.201.65.207:/setup/certificate/client.crt /setup/

  1. 运行 test2.py

提示输入Enter PEM pass phrase,这里为我们 step11 中配置的客户端用户密码 。

输入密码后 test2.py运行成功

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法
  1. 在真实应用中我们不可能每次输入密码,修改 client key 为不需要每次输入密码

openssl rsa -in client.key -out client.key.unsecure

  1. 修改程序连接,并运行test2.py,不需要输入密码,python程序运行成功

修改连接为

conn = psycopg2.connect(dbname="db_tpcc", user="tpcc_user", password="password", host="10.201.65.207", port=30100,sslmode="verify-ca", sslcert="client.crt",sslkey="client.key.unsecure",sslrootcert="ca.pem")

python3 test2.py

使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法

到了这里,关于使用 psycopg2 连接高斯数据库报错 failed: none of the server‘s SASL authentication mechanisms are supported解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac 安装psycopg2,报错Error: pg_config executable not found.

    在mac 上安装psycopg2的方法:执行: pip3 install psycopg2-binary 。 如果执行pip3 install psycopg2,无法安装psycopg2 报错信息如下:

    2024年02月08日
    浏览(55)
  • 利用docker轻松安装高斯数据库

    openGauss是一款开源的关系型数据库管理系统,它具有多核高性能、全链路安全性、智能运维等企业级特性。 openGauss内核早期源自开源数据库PostgreSQL,融合了华为在数据库领域多年的内核经验,在架构、事务、存储引擎、优化器及ARM架构上进行了适配与优化。作为一个开源数

    2024年02月07日
    浏览(48)
  • GaussDB高斯数据库(SQL语法入门)

    DDL数据定于语言:用于定义或修改数据库中的对象,如:表,索引,视图,数据库,序列,用户,角色,表空间,会话等。 DDL不支持物化视图,存储过程,触发器,自定义函数,自定义类型。 DML数据操作语言:用于对数据库表中的数据进行操作,如插入,更新和删除。 DCL数

    2023年04月10日
    浏览(47)
  • 华为openGauss高斯数据库 - gsql用法

    目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1  最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 l命令 1.3.2 du命令和dg命令 1.3.3 db命令 1.3.4 dn命令 1.3.5 d命令 1.3.6 dt命令 1.3.7 di命令 1.3.8 dv命令 1.

    2024年02月12日
    浏览(41)
  • GaussDB高斯数据库(SQL语法分类)

    日常查询中,最常用的是通过FROM子句实现的查询。 语法格式:使用方法: SELECT [ , ... ] FROM table_reference [ , ... ] SELECT之后和FROM子句之前出现的表达式称为SELECT项。SELECT项用于指定要查询的列,FROM指定要从哪个表中查询。如果要查询所有列,可以在SELECT后面使用*号,如

    2024年02月16日
    浏览(48)
  • 什么是 Java 中的数据库连接池?为什么使用连接池来管理数据库连接?

    数据库连接池(database connection pool)是在 Java 中用于管理数据库连接的一种技术。它的主要目的是提高数据库连接的重用性和性能。在传统的数据库连接方式中,每次与数据库建立连接时都需要进行一系列的网络通信和身份验证操作,这样的开销较大并且会影响应用程序的性

    2024年02月06日
    浏览(62)
  • 【100天精通python】Day31:使用python操作数据库_数据库编程接口,连接对象和游标对象,数据库连接配置

    目录  专栏导读  一、数据库编程接口 1. Python标准库接口 2. MySQL Connector/Python接口

    2024年02月13日
    浏览(49)
  • 怎么使用Navicat连接数据库?

      Navicat是一款功能强大的数据库管理工具,支持多种数据库类型,包括MySQL、Oracle、SQL Server等。它的用户界面友好,提供了许多方便的功能,如图形化的数据库设计、数据导入和导出、SQL编写和调试等。本文将介绍Navicat的使用步骤,帮助您更好地管理和使用数据库。 第一步

    2024年02月11日
    浏览(49)
  • eclipse使用jdbc连接数据库

    下载和mysql对应版本的jar包。 我的mysql下载的8.0.13版本的,所以下载8.0.13的jar包。官网下载地址: https://dev.mysql.com/downloads/connector/j/?os=26 (如果需要下载历史版本,点击 archievs) 下载之后,解压目录,获得jar包。 导入jarb包。 第一步:在eclipse中新建工程JDBC,建立一个lib目录

    2024年02月11日
    浏览(51)
  • 使用Java连接SQLserver数据库

    使用win10、SQLServer2012、eclipse2020-6、Java1.8.0_311    下载sqljdbc_6.0.8112.200_chs.tar.gz,再将其解压sqljdbc_6.0.8112.200_chs.tar  这里x64是在适于64位,x86是适于32位,选择合适自己电脑的,这里我的是64位的计算机,选择x64文件中的文件,下如图。 将此文件sqljdbc_auth.dll复制到D:Javajdk1.8.

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包