11

根据本手册,我编写了一个简单的 sqlalchemy-django 模型:http: //lethain.com/replacing-django-s-orm-with-sqlalchemy/,这对我来说效果很好。
我的 Django 使用以下设置连接到远程 postgresql 数据库:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'wetlab_dev',                               # Or path to database file if using sqlite3.
    'USER': 'limlim',                                 # Not used with sqlite3.
    'PASSWORD': '',                                     # Not used with sqlite3.
    'HOST': 'cab-27',                                   # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                                         # Set to empty string for default. Not used with sqlite3.
    }
}

几天前它对我有用,但现在当我再次尝试加载“主页”时,它向我显示以下错误消息:

(OperationalError) FATAL:  Ident authentication failed for user "limlim"    

sqlalchemy 引擎配置是:

CONNECTION_STR = 'postgresql://limlim:@cab-27/wetlab_dev'

engine = sqlalchemy.create_engine(CONNECTION_STR)   

似乎我没有更改与数据库配置相关的任何内容,但我仍然收到此错误消息。
另外,当我尝试使用我的用户名连接到远程服务器上的数据库时,我成功了,所以我想我的用户名访问该数据库不是权限问题。

可以做些什么来克服这个错误?

4

3 回答 3

38

pg_hba.conf已配置为对来自 localhost (127.0.0.1) 的连接使用“身份”身份验证。您需要将其更改md5为您的数据库和用户组合。

于 2012-07-05T12:25:20.283 回答
4

@Craig 是对的,必须在文件 pg_hba.conf 中更新数据库用户的身份验证方法,这是我所做的:

sudo nano /var/lib/pgsql/data/pg_hba.conf

转到文件底部,然后在 IPv4 和 IPv6 行上将方法从 ident 更改为 md5:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5  # <- here
# IPv6 local connections:
host    all             all             ::1/128                 md5  # <- and here
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

快乐编码:)

于 2020-10-29T18:01:51.273 回答
0

有同样的错误,只是为了解决我的情况,而不是md5我使用trust. 这是因为 1) Django 需要 SELECT、INSERT、DELETE 和 UPDATE 权限,以及 2) 使用 postgres 用户不需要密码。

于 2021-10-08T08:48:10.403 回答