Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用户postgres的Psycopg2对等身份验证_Python_Postgresql_Psycopg2_Ubuntu 16.04 - Fatal编程技术网

Python 用户postgres的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以与所示相同

我似乎已经正确安装了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以与所示相同的方式进行连接,但脚本:

#!/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
的身份运行脚本的其余部分,那么您需要启用不同的身份验证方法(尽管在注释中会涉及到一些安全问题)。