无法使用普通 Ubuntu Linux 用户访问 Django 中的 PostgreSQL 数据库

Posted

技术标签:

【中文标题】无法使用普通 Ubuntu Linux 用户访问 Django 中的 PostgreSQL 数据库【英文标题】:Can't access PostgreSQL databases in Django with normal Ubuntu Linux user 【发布时间】:2012-04-28 12:33:55 【问题描述】:

我正在学习在 Ubuntu 11.10 中同时使用用户 PostgreSQLDjango,我发现我需要切换到我在终端中安装 PostgreSQL ("postgres") 时创建的用户(通过 @987654325 @) 以便创建并访问要在 Django 中使用的数据库。不幸的是,"postgres" 用户在我的本地文件系统上没有文件写入权限,所以当我尝试执行某些操作时,例如将模型对象添加到具有图像字段的数据库中,我被阻止了。但是,如果我在终端中切换到我的普通 Ubuntu 用户名并尝试访问我在 Django 开发服务器上的管理站点,我会收到如下错误:

OperationalError at /admin/

FATAL:  Peer authentication failed for user "postgres"

Request Method:     GET
Request URL:    http://127.0.0.1:8000/admin/
Django Version:     1.3.1
Exception Type:     OperationalError
Exception Value:    

FATAL:  Peer authentication failed for user "postgres"

Exception Location:     /usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py in _cursor, line 140
Python Executable:  /usr/bin/python
Python Version:     2.7.2

我正在尝试阅读 PostgreSQL 文档,让我的普通用户可以访问我为 Django 项目创建的数据库,但我无法弄清楚,因为我不了解 PostgreSQL 之间的关系角色/用户和 Ubuntu 用户。有人可以向我解释一下如何让我的普通 Ubuntu 用户名访问我在 PostgreSQL 中的数据库吗?我可能需要一个特定的指令列表,因为我试图使用 PostgreSQL 文档将它拼凑在一起,但我完全迷失了。

【问题讨论】:

***.com/questions/8167602/…的可能重复 不清楚你在这里真正想要做什么。如果一个对象由数据库引擎管理,您通常希望通过数据库连接而不是直接访问该对象。当您收到此错误时,您想做什么? 【参考方案1】:

Postgres ident notes

您的普通用户可能无法从本地主机登录。如果你的 django 项目和你的 PG 数据库在同一台机器上运行,那么你需要检查 pg_ident.conf 文件。

基本上,您可以设置 postgres,以便您的 unix 用户自动映射到 postgre 用户,这样当您运行 pgsql 时,它会尝试让您登录。您可以阻止用户登录外部 IP 或本地主机。因此,在摆弄 Django 设置之前,请先检查这些设置。

否则试试这个

好吧,你应该这样做

sudo passwd postgres 

然后输入 unix postgres 用户的密码

su postgres
psql
create database djangodb;
create role djangouser with password 'something';

在您的 settings.py 文件中尝试这些用户详细信息。更多关于 postgres here

还有

Ident methods 和 The pg_hba.conf file

这对你有帮助吗?

【讨论】:

您好 nialloc,感谢您的提示。不幸的是,当我打开 pg_indent.conf 以查看其中的内容时(使用 sudo gedit /etc/postgresql/9.1/main/pg_indent.conf),出现的只是一个空文件。我需要用其他方式打开它才能看到里面的东西吗? 感谢您的额外澄清,但如果您在下面查看,您会看到我在意识到它确实是 cfedermann 建议的重复后回答了我自己的问题。不过再次感谢!【参考方案2】:

cfedermann 是正确的;这是问题的副本:

Django connection to PostgreSQL: "Peer authentication failed"

解决方法是一样的。在我的 Django 项目的“settings.py”文件中,在 DATABASES 部分下,我的“HOST”被设置为空字符串,因为那里有一个内置注释(意思是 Django 开发人员编写的注释),字面意思是说,“设置为本地主机的空字符串。”显然这不是真的,因为只有在我明确输入 'localhost' 之后,我才能使用我的默认 Linux 用户名连接到我的 psql 数据库。

我想这里的教训是,对于所有试图在开发中将它与 postgresql 一起使用的 Django 其他新手,请确保在“settings.py”文件中输入“LOCALHOST”,否则你不会能够连接到存储在您自己机器上的 psql 数据库!

再次感谢 cfedermann 为我指出答案。

【讨论】:

如果这是真的,那么教训就是提交一个针对 Django 的错误。

以上是关于无法使用普通 Ubuntu Linux 用户访问 Django 中的 PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

解决Linux下普通用户无法使用root连接MySQL服务

Linux:远程Ubuntu服务器误修改sudoers 导致无法sudo的解决办法

ubuntu Linux系统无法将文件移动到回收站,只能直接删除。请问怎么解决?如下图:

Linux下普通用户无法使用docker命令的解决办法

linux用户和用户组管理

Linux--Ubuntu下root用户和普通用户的切换