我根据本手册编写了一个简单的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)
似乎我没有更改任何与数据库配置相关的内容,但仍然收到此错误消息 此外,当我尝试使用我的用户名连接到远程服务器上的数据库时,我成功了,所以我想这不是我的用户名访问此数据库的权限问题。
可以采取哪些措施来克服这个错误?
答案 0 :(得分:25)
您的pg_hba.conf
配置为对来自localhost(127.0.0.1)的连接使用'ident'身份验证。对于数据库和用户组合,您需要将其更改为md5
。
答案 1 :(得分:4)
对于那些不知道在哪里找到pg_hba.conf
和在哪里进行更改的人:
nano /var/lib/pgsql/data/pg_hba.conf
找到以下行并将ident
更改为md5
:
# IPv4 local connections:
host all all 127.0.0.1/32 ident #change to md5
# IPv6 local connections:
host all all ::1/128 ident #change to md5
最后重新启动postgres:
sudo service postgresql restart
答案 2 :(得分:1)
@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
快乐编码:)