2012-01-10 3 views
1

Apache + mod_wsgi 및 PostgreSQL을 사용하여 장고 사이트를 Ubuntu 10.04에 배포 할 계획입니다.PostgreSQL 데이터베이스에 대한 Apache 사용자 권한

IDENT 인증을 사용하여 데이터베이스에 연결하려고합니다. 이를 위해 Apache 용 PostgreSQL 사용자 (www-data)를 만들어야합니다. 저는 이것을 수퍼 유저로 만들지 않거나 특별한 권한을 제공하지 않기로했습니다.

다음으로 데이터베이스를 생성했습니다. 사실 테스트를하면서이 작업을 두 번했습니다. 처음 아파치 사용자를 소유자로 설정했습니다. 두 번째로 소유자를 나 자신 (수퍼 유저)으로 설정하고 데이터베이스에 대한 모든 권한을 Apache 사용자에게 부여했습니다.

내가 직접 Django syncdb 관리 명령을 사용할 때 생성 된 테이블은 Apache 사용자가 액세스 할 수 없습니다. 이 문제는 각 테이블에 대해 Apache 사용자에게 모든 권한을 부여하여 해결할 수 있지만 이는 약간의 불편 함입니다.

다른 방법으로 수퍼 유저로 액세스를 허용하는 것으로 보입니다.

프로젝트에서 로컬 DB에 Postgresql 수퍼 유저로 액세스하는 것이 안전하다고 생각합니까? IDENT 인증을 사용해도 안전합니까? 그렇지 않다면 일반적인 관행은 무엇입니까?


편집 : I했습니다 PostgreSQL의 로컬 연결에 대한 MD5 인증을 사용하도록 전환하는 것은 인생을 더 쉽게 만드는 것을 발견하기 때문이다.

ident 인증을 사용하는 경우 데이터베이스에 대한 연결은 정상 작동 중에 Apache 사용자를 통해 이루어집니다. Django 관리 명령을 사용할 때 연결은 현재 사용자를 통해 이루어집니다.

MD5를 사용하는 경우 위에 나열된 문제를 피하면서 두 상황 모두 settings.py 파일의 DATABASES 섹션에 지정된 세부 정보를 사용하여 데이터베이스에 연결됩니다.

PostgreSQL 수퍼 유저를 사용하는 것이 현명한 지 알고 싶습니다.

답변

3

수퍼 유저로 응용 프로그램을 연결하면 거의 현명하지 못합니다. 응용 프로그램이 실제로 데이터베이스 자체를 작성 및/또는 삭제해야 할 필요가없는 한 (그리고 이것은 거의 불가능할 것입니다.) 필자는 필연적이라고 생각하지 않습니다. 응용 프로그램이 해당 데이터베이스의 소유자 인 데이터베이스에 연결하면 해당 데이터베이스의 범위 내에있는 수퍼 유저가됩니다. 이는 이 아니기 때문에이 아닐 수도 있습니다.

일반적으로 응용 프로그램에 MD5로 인증하는 계정을 사용하여 데이터베이스에 액세스해야합니다. 예를 들어 응용 프로그램 계정이 MD5 인증을 사용할 수있는 유일한 계정이고 로컬 시스템의 다른 모든 사용자가 ident/peer 인증을 사용하도록 pg_hba.conf를 설정할 수 있습니다.

실제로 여기에 필요한 것은 아파치 사용자와 다른 장고 사용자를 그룹화하는 역할 이었으므로 한꺼번에 액세스 권한을 부여 할 수 있습니다.

PostgreSQL에는 스키마의 모든 테이블 등에 대한 권한을 한 번에 부여 할 수있는 방법과 새로운 개체에 적용 할 기본 권한을 지정하는 방법이 있습니다. 이 이전 답변은 도움이 될 수 있습니다. How do you create a read-only user in PostgreSQL?

4

IDENT 인증은 가치가있는 것보다 더 번거롭지 않게되었습니다. 다음은 PostgreSQL 수퍼 유저 역할의 사용을 피하기 위해 한 일입니다 ...postgres 리눅스 사용자에게

스위치 :

sudo su - postgres 

편집 PostgreSQL의 호스트 기반 인증 구성 파일 :이 파일의 하단에

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

스크롤, 보이는 라인을 찾고 이렇게 :

local all all ident 

변경 ident ~ md5, 종료하고 저장하십시오. 이것은 PostgreSQL에 MD5로 암호화 된 패스워드를 사용하여 로컬 연결에 대한 인증을하도록 지시합니다.

/etc/init.d/postgresql-8.4 restart 

는 PostgreSQL의 사용자를 만듭니다 : : 이제 PostgreSQL의를 다시 시작하라는 메시지가 나타나면

createuser django_user --pwprompt 

가 특별한 권한 중 하나를 허용하지 마십시오. 이제 새 데이터베이스 작성 :

createdb -E UTF8 -O django_user django_db 

이러한 옵션은 UTF8에서 데이터베이스를 인코딩 및 django_user에 소유자를 설정합니다. 이제 원래 리눅스 사용자 계정에 다시 종료 할 수 있습니다 : 당신이 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 관리 명령은 위의 설정을 사용하여 데이터베이스를 인증합니다.

관련 문제