Python 用户postgres的Psycopg2对等身份验证
我似乎已经正确安装了PostgreSQL 9.5.5。和Ubuntu 16.04上的Psycopg2,并可通过以下方式登录:Python 用户postgres的Psycopg2对等身份验证,python,postgresql,psycopg2,ubuntu-16.04,Python,Postgresql,Psycopg2,Ubuntu 16.04,我似乎已经正确安装了PostgreSQL 9.5.5。和Ubuntu 16.04上的Psycopg2,并可通过以下方式登录: sudo -u postgres psql 如果我随后发布\conninfo,我会得到以下信息: You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432". 当然,我应该能够通过psycopg2以与所示相同
sudo -u postgres psql
如果我随后发布\conninfo
,我会得到以下信息:
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
当然,我应该能够通过psycopg2以与所示相同的方式进行连接,但脚本:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect("dbname=postgres user=postgres")
conn.close()
给我:
psycopg2.OperationalError: FATAL: Peer authentication failed for user "postgres"
我只希望PostgreSQL用于个人用途,所以我不想启用TCP身份验证
如何在Psycopg2中正确使用用户“postgres”的对等身份验证?这就是您调用的方式
!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database="postgres", user="postgres", password="postgres", port=5432)
conn.close()
对等身份验证的工作原理是将连接字符串中的Postgres用户名与运行脚本的Linux用户的名称进行比较
尝试使用
sudo-u postgres运行Python脚本
您需要提供主机
conn = psycopg2.connect("dbname='template1' user='dbuser' host='localhost' password='dbpass'")
这些是postgresql的一些身份验证方法 peer意味着它将信任UNIX用户的身份(真实性)。所以不要问密码 md5意味着它将始终请求密码,并在使用md5进行哈希运算后验证密码 信任意味着它永远不会要求密码,并且始终信任任何连接 我想你的情况是你必须这样说: 托管所有127.0.0.1/32标识 到 托管所有127.0.0.1/32 md5 及 主机所有::1/128标识 到
主机所有::1/128 md5这给我带来了
致命:用户“postgres”的密码身份验证失败
,我认为密码意味着TCP身份验证。如何设置localhost?现在我返回到psycopg2。操作错误:致命:用户“postgres”的对等身份验证失败。能否启用无密码登录并从连接中删除pw字段?sudo-u postgres psql postgresLook在这里更改postgres pw-我已经读到在默认postgres用户上设置密码会更改身份验证,我希望避免这种情况。感谢您使用sudo-u postgres
运行Python脚本吗?谢谢,以sudo-u postgres
的身份运行修复了所有问题。您可以将此作为答案发布,以便我接受吗?问题指定了对等身份验证。这不是用户“postgres”的正确答案,而是显式添加了“localhost”(而不是空字符串)由于django的settings.py中的主机对我产生了影响。对我来说,仅仅添加host='localhost'
,它也产生了影响,现在它开始工作了。另一个答案是“使用sudo-u postgres
运行python脚本”不是我的首选解决方案,因为我希望在python脚本中进行身份验证,甚至能够在jupyter笔记本或iPython中以交互方式运行它。如果您的脚本还需要编写一些文件(例如日志文件),该怎么办转到$USER(登录用户)拥有的目录,该用户不是postgres
用户?因为当使用sudo-u postgres
运行脚本时,您将遇到以下错误:PermissionError:[Errno 13]权限被拒绝:/home/${USER}/../my_log_文件
@s.k:如果您创建了一个名为$USER
的数据库用户,那么您可以在没有sudo
的情况下使用对等身份验证。您还可以分离文件写入和数据库访问(例如,编写一个子脚本,记录到stdout
,使用sudo
调用脚本并重定向输出)。如果您确实需要以postgres
的身份连接,但无法以postgres
的身份运行脚本的其余部分,那么您需要启用不同的身份验证方法(尽管在注释中会涉及到一些安全问题)。