Postgresql error, "no pg_hba.conf entry"



我是编程新手。我正在构建一个rails应用程序,现在想将其推送到Heroku。我遵循了 Heroku 的指南将我的数据库从 sqlite 3 转换为 postresql。这样做之后,当我尝试迁移甚至在本地主机上签出我的应用程序时,我会收到此错误

"PG::ConnectionBad: FATAL: 没有主机"[local]"的 pg_hba.conf 条目,用户"keemtaker",数据库"tuma_database_development",SSL 关闭"

我查看了同一问题的先前答案,但这对我来说是如此令人困惑和不知所措。如果我能获得解决此错误的分步指南,那就太好了。我以前使用过PostgreSQL,没有任何问题。这就是我的宝石文件的样子

source 'https://rubygems.org'
ruby '2.3.4'
gem 'figaro'
gem 'jbuilder', '~> 2.0'
gem 'puma'
gem 'rails', '5.1.4'
gem 'redis'
gem 'cloudinary'
gem 'carrierwave', '~> 1.2'
gem 'rails_admin', '~> 1.2'
gem 'pg'
gem 'autoprefixer-rails'
gem 'bootstrap-sass'
gem 'jquery-rails'
gem 'font-awesome-sass'
gem 'sass-rails'
gem 'simple_form'
gem 'turbolinks', '~> 5.0.0'
gem 'coffee-rails'
gem 'uglifier'
gem 'webpacker'
gem 'devise'
gem 'ransack'
gem 'trix'

gem "letter_opener", group: :development

group :development do
gem 'web-console', '>= 3.3.0'
end
group :development, :test do
# gem 'binding_of_caller'
# gem 'better_errors'
gem 'pry-byebug'
gem 'pry-rails'
gem 'listen', '~> 3.0.5'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

在我的数据库中,我有

default: &default
adapter: postgresql
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: tuma_database_development
test:
<<: *default
database: tuma_database_test
production:
<<: *default
database: tuma_database_production

根据Heroku支持,这不是来自您的Rails应用程序的错误,而是来自试图对PostgreSQL数据库进行身份验证的恶意人员:

问题

我在我的 Heroku Postgres 中看到失败的连接尝试 日志,但我没有创建这些连接,它们来自 IP 我不认识的地址。看起来有人可能正在尝试 要破解我的数据库:

sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "122.180.247.11", user "postgres", database "postgres", SSL off

上述错误的变化可能包括将user设置为rootadmintest或其他默认用户名。

分辨率

这些错误表示登录尝试失败 您的数据库,这意味着未建立连接。

通常会看到使用默认值的失败连接尝试 用户名(如user "postgres", database "postgres")。在 公共互联网意味着某种程度的未经授权的访问尝试是 可能。这些是非常简单的尝试,通常涉及 尝试组合,如rootpsqltestpostgres。然而 Heroku Postgres 用户名、密码和数据库名称组合 是随机生成的,使这些泛型访问尝试徒劳无功。

sql_error_code=28000的另一个常见原因,特别是当它 涉及"不支持的前端协议"消息是使用 像这样的工具nmap.阅读有关"不支持的前端协议"的更多信息 消息。

Heroku认真对待安全,并努力工作以确保 您的数据安全。此外,信任是 salesforce.com 和希罗库。这是对客户隐私的承诺 并激发信任,指导我们每天做出的决定 基础。信任是每一位员工的责任,也是每个人的责任。 我们认真对待。

通过此配置,您的应用程序将查找本地数据库,而在 heroku 上,您没有该数据库

但是在这里看到他们建议的配置:

  1. 添加帖子附加组件
  2. 将您的生产配置线替换为上面链接中显示的
  3. 生产线

当你安装插件时,heroku 会在你的项目上添加一个DATABASE_URL环境变量。Rails将自动查找并选择此变量(请参阅此处)

您需要为 Heroku 指定数据库 URL,因为您无权访问其基础架构上的本地数据库。将database.ymlproduction部分替换为以下内容:

production:
url: <%= ENV["DATABASE_URL"] %>
pool: 15

因此,您的完整database.yml如下所示:

default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: tuma_database_development
test:
<<: *default
database: tuma_database_test
production:
<<: *default
url: <%= ENV["DATABASE_URL"] %>

来源:Heroku 上的 Rails 入门

最新更新