2

今日、ローカルの Ubuntu 10.04 VM に Rails 3.2.1 と Postgresql 8.4 をインストールしようとしました。私は基本的にhttp://www.mcbsys.com/techblog/2011/10/set-up-postgresql-for-rails-3-1/の指示に従いました。別の方法で行う必要があったのは、pg_hba.conf の行を「local postgres myapp trust」に変更することだけでした。これは、デフォルト ユーザーの postgres にパスワードがなく、Linux に一致する「login_name」という名前の postgresql ユーザーを作成する必要があったためです。システム ログイン ユーザー名 (この例のために "login_name" と呼びましょう)、そうしないと rake db:create を使用してデータベースを作成できませんでした。

私のdatabase.ymlファイルは次のようになりました:

development:
  adapter: postgresql
  encoding: unicode
  database: development_db
  pool: 5
  user: login_name
  password: some_random_password

私の質問は、これを機能させるためにシステムのログイン名と一致するユーザー名を作成する必要があったのはなぜですか?これを回避する方法はありますか? 私はこれをグーグルで検索しましたが、満足のいく答えを見つけることができませんでした。

4

2 に答える 2

2

PostgreSQL の構成を確認すると、関連する 2 つのファイルが見つかります。

  1. pg_hba.conf
  2. pg_ident.conf

pg_hba は、通常、次のようなエントリを使用して、認証リクエストを処理するメカニズムを制御します。

local   all         all                          ident

identは、システム ユーザーの ID で行われるすべてのローカル/UNIX ソケット接続を意味します。

「非システム」ユーザーがいる場合は、pg_ident.conf にマップを作成する必要があります。

# MAP    OS-Name    DB-Name
myusers  user       user
myusers  user       dbuser

pg_hba.conf を次のように変更します。

local    all      all      ident map=myusers

認証については、構成ファイルとオンラインのPostgreSQL Administration Guideで詳しく説明されています。

于 2012-04-20T16:04:14.363 に答える
0

で指定するuser:名前は、ログインに使用される名前です。必要ない場合は、システム ユーザーにする必要はありません。問題は、データベースが初期化されると、その所有者が (通常) を実行したユーザー名に設定されるdb_initことです。これは異なる場合があります。そのため、ホストのユーザー名とデータベース内のユーザー名は疎結合になる傾向があります。

セキュリティの観点からのベスト プラクティスはinit_db、ユーザーとして実行し、postgres明示的にGRANT権限を付与するか、template1データベースの所有者 (およびパスワード) をアプリケーションで使用する所有者に変更することです。データベース (より正確にはスキーマ) は、template1作成時の設定を使用します。

実際には、Web アクセス可能なサーバーでは、データベース ユーザーと同じ名前sudoの、アクセスが制限された (ほとんどまたはまったくない) (システム) ユーザー名を持つのが好きです。名前を設定して、どこでも使用します。これにより、データベースのコピーや構成などが簡単になります。そうしないと、「ロール foo が見つかりません」というエラーが発生します。

Rails を使用すると、開発を非常に簡単に開始できます。これは良いことです。安全でない本番環境を作成するのが非常に簡単になるべきではありません:-)

于 2012-03-18T16:42:19.047 に答える