无法使用普通 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 中同时使用用户 PostgreSQL
和 Django
,我发现我需要切换到我在终端中安装 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:远程Ubuntu服务器误修改sudoers 导致无法sudo的解决办法