2012-01-10 25 views
1

Ubuntu 10.04にApache + mod_wsgiとPostgreSQLを使用してDjangoサイトを導入する予定です。PostgreSQLデータベースに対するApacheユーザ権限

IDENT認証を使用してデータベースに接続する予定です。このためには、Apache用のPostgreSQLユーザー(www-data)を作成する必要があります。私はこれをスーパーユーザーにしたり、特別な特権を与えたりしないことに決めました。

私はデータベースを作成しました。私は実際にテストの間にこれを2回しました。私は初めてApacheユーザーを所有者に設定しました。 2回目は自分自身(スーパーユーザー)としてオーナーを設定し、データベースに対するすべての権限をApacheユーザーに与えました。

Django syncdb管理コマンドを使用すると(自分自身で)、作成されたテーブルにはApacheユーザーがアクセスできません。これは、各テーブルのApacheユーザーにすべてのアクセス許可を与えることで解決できますが、それは厄介なことです。

代替方法として、スーパーユーザーとしてのアクセスが許可されているようです。

私のプロジェクトでローカルDBにPostgreSQLのスーパーユーザーとしてアクセスすることは許容されていると思われますが、IDENT認証は安全ですか?そうでない場合、一般的な慣行は何ですか?


編集:私は以来、PostgreSQLはローカル接続のためのMD5認証を使用するように切り替えが人生をより容易にすることがわかってきました

ident認証を使用する場合、データベースへの接続は、通常の操作中にApacheユーザー経由で行われます。 Django管理コマンドが使用されるとき、接続は現在のユーザ経由で行われます。

MD5を使用する場合、上記の問題を回避して、どちらの状況でもsettings.pyファイルのDATABASESセクションで指定された詳細を使用してデータベースに接続します。

PostgreSQLのスーパーユーザが賢明であるかどうか知りたいです。

答えて

3

アプリケーションをスーパーユーザーとして接続することはほとんど間違いです。アプリケーションが実際にデータベース自体を作成および/または削除する必要がない限り(これはほとんどありません)、私はそれが必要だとは思わないのです。アプリケーションがそのデータベースの所有者としてデータベースに接続すると、そのデータベースの範囲内では実質的にスーパーユーザーになりますが、でもでない可能性があります。

私は通常、MD5で認証されたアカウントを使用してデータベースにアクセスします。たとえば、アプリケーションアカウントがMD5認証を使用できる唯一のアカウントであり、ローカルマシン上の他のすべてのユーザーがident/peer認証を使用するようにpg_hba.confを設定することは可能です。

ここで本当に必要なのは、Apacheユーザーと他のDjangoユーザーをグループ化する役割だったと思います。そのため、一括でアクセスを許可することができます。

Postgresqlには、スキーマ内のすべてのテーブルなどに対する権限を一度に付与する方法と、新しいオブジェクトに適用されるデフォルトの権限を指定する方法があります。この以前の回答は参考になるかもしれません:How do you create a read-only user in PostgreSQL?

4

IDENT認証は価値があったよりも面倒に終わった。 PostgreSQLのスーパーユーザ役割の使用を避けるために私がやったことは次のとおりです。postgres Linuxユーザへ

スイッチ:

sudo su - postgres 

編集PostgreSQLのホストベースの認証の設定ファイル:このファイルの下の方に

nano /etc/postgresql/8.4/main/pg_hba.conf 

スクロールし、な行を探してこのように:

local all all ident 

変更identmd5、終了して保存します。これはPostgreSQLにローカル接続上の認証にMD5で暗号化されたパスワードを使用するように指示します。今のPostgreSQLを再起動します。

/etc/init.d/postgresql-8.4 restart 

はPostgreSQLユーザを作成します。

createuser django_user --pwprompt 

メッセージが表示されたら、特別な権限のいずれかを受け入れないでください。

createdb -E UTF8 -O django_user django_db 

これらのオプションは、データベースをUTF8でエンコードし、所有者をdjango_userに設定します。あなたは今、元のLinuxユーザアカウントに戻って終了することができます:あなたはpython manage.py syncdbを実行したり、その他の場合は

DATABASES = { 
    'default': { 
     'ENGINE': 'django.contrib.gis.db.backends.postgis', 
     'NAME': 'django_db', 
     'USER': 'django_user', 
     'PASSWORD': '[your password]', 
     'HOST': '', 
     'PORT': '', 
    } 
} 

exit 

あなたのプロジェクト設定ファイル(settings.py)このようなものを含める必要がありますDjango管理コマンドの場合、上記の設定はデータベースの認証に使用されます。

関連する問題