Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Rails new するだけで、なぜかローカルのPostgreSQL環境につながってしまう話

More than 1 year has passed since last update.

という問題に遭遇。

database.ymlで、
ユーザ名もパスワードも設定していないのに、
普通にdb:createとか出来てしまう。

個人開発の環境で、
RailsからDBにアクセスはできるので直ちに実害は無いけど、
気持ち悪いので調査。

結論としては、以下2つの組み合わせっぽい。

  • Rails database.ymlデフォルト動作
  • HomebrewからPostgreSQLをインストールした際のデフォルト設定

Rails database.ymlデフォルト動作

特にdatabase.ymlでusernameもpasswordも設定していない場合、
Railsは以下のような動作をするらしい。

database.yml
  # The specified database role being used to connect to postgres.
  # To create additional roles in postgres see `$ createuser --help`.
  # When left blank, postgres will use the default role. This is
  # the same name as the operating system user that initialized the database.
  username:

端的に言うと、
usernameが設定されていない場合は、
DBの初期設定を実施したOSのユーザ名を使うよ、

という感じだと思う。

多分通常は、PCのユーザ名辺りが使われるんだろう。
なるほどなるほど。

HomebrewからPostgreSQLをインストールした際のデフォルト設定

usernameを設定しなくても、有効なPostgreSQLのユーザ名を指定してくれるのは分かった。

でもPostgreSQL側で設定しているはずのpasswordが無視されているのは納得いかない!

で調べた所あっさり理由は見つかった。

HomebrewでPostgreSQLをインストールすると
pg_hba.conf に記載される初期設定では、 接続を無条件で許可する というせっていになっている。
https://qiita.com/Mitsunori_Tsukada/items/383a7b7124e3c4d9c82f

何だそりゃまじかー。

確かにこんな感じになっていた。

pg_hba.conf
# CAUTION: Configuring the system for local "trust" authentication
# allows any local user to connect as any PostgreSQL user, including
# the database superuser.  If you do not trust all your local users,
# use another authentication method.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust

コメント含めて、めっちゃ書いてあるね。

まとめ

  • コメント有能。ちゃんと読むべき。
  • PostgreSQLの基本設定項目くらいは知っとかないとな。。。

特にPostgreSQLはこの設定知っていれば瞬殺だった気がする;;

luxiar
Ruby on Rails専門のWebアプリケーション開発に特化した町田の受託開発企業です
http://www.luxiar.com/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away