【问题标题】:Django - (OperationalError) FATAL: Ident authentication failed for user "username"Django - (OperationalError)致命:用户“用户名”的身份验证失败
【发布时间】:2012-07-05 14:19:45
【问题描述】:

根据本手册:http://lethain.com/replacing-django-s-orm-with-sqlalchemy/,我编写了一个简单的 sqlalchemy-django 模型,对我来说效果很好。
我的 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)   

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

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

【问题讨论】:

  • 你应该看看一些日志...... Django 应用程序无法连接到 postgreslq 服务器的原因有很多......
  • @Tisho 您认为这是数据库问题还是代码问题?我已经添加了引擎配置行。
  • 看起来像一个数据库配置问题 - 您实际上可以连接到数据库,但它拒绝您的凭据。正如你所说的那样,这在以前是有效的,如果你没有对代码进行更改 - 所以看起来有人可能在数据库服务器中弄乱了一些东西......
  • @Tisho 是的,谢谢。这确实是系统人员为我修复的。

标签: python django postgresql sqlalchemy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    @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
    
    

    快乐编码:)

    【讨论】:

    • 太完美了。它有效且安全。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2020-04-10
      • 2015-02-17
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多