Права пользователя Apache для базы данных PostgreSQL - PullRequest
1 голос
/ 10 января 2012

Я планирую развернуть сайт Django, используя Apache + mod_wsgi и PostgreSQL в Ubuntu 10.04.

Я намерен подключиться к базе данных, используя аутентификацию IDENT.Для этого мне нужно создать пользователя Postgresql для Apache (www-data).Я решил не делать этого суперпользователем или предоставлять какие-либо особые привилегии.

Затем я создал базу данных.Я действительно делал это дважды во время тестирования.Первый раз я назначил пользователя Apache владельцем;во второй раз я установил владельца как себя (суперпользователя) и предоставил все права доступа к базе данных пользователю Apache.

Когда я использую команду управления Django syncdb (от своего имени), созданные таблицы недоступныпользователю Apache.Эту проблему можно решить, предоставив все разрешения пользователю Apache для каждой таблицы, но это немного неприятно.

Альтернатива, по-видимому, разрешает доступ как суперпользователь.

Считается ли безопасным / приемлемым для моего проекта доступ к локальной базе данных в качестве суперпользователя Postgresql, и безопасно ли использовать аутентификацию IDENT?Если нет, то какова обычная практика?


EDIT: С тех пор я обнаружил, что переключение PostgreSQL для использования аутентификации md5 для локальных соединений облегчает жизнь.

При использовании идентифицируемой аутентификации соединения с базой данных осуществляются через пользователя Apache во время нормальной работы.Когда используются команды управления Django, соединения осуществляются через текущего пользователя.

Если вы используете MD5, обе ситуации будут подключаться к базе данных, используя данные, указанные в разделе DATABASES вашего файла settings.py, избегаяпроблемы, перечисленные выше.

Мне все еще интересно узнать, целесообразно ли использовать суперпользователя PostgreSQL.

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Аутентификация IDENT оказалась более хлопотной, чем она того стоила.Вот что я в итоге сделал, чтобы избежать использования роли суперпользователя PostgreSQL ...

Переключение на пользователя postgres linux:

sudo su - postgres

Редактирование конфигурации аутентификации на основе хоста PostgreSQLfile:

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

Прокрутите до нижней части этого файла, ища строку, которая выглядит следующим образом:

local   all   all   ident

Измените ident на md5, выйдите и сохраните,Это говорит 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:

exit

В вашем файле настроек проекта (settings.py) должно быть что-то вроде этого:

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

При запускеpython manage.py syncdb или любые другие команды управления Django, указанные выше настройки будут использоваться для аутентификации в базе данных.

3 голосов
/ 10 января 2012

Подключение приложений в качестве суперпользователя почти определенно неразумно. Если приложению не нужно создавать и / или удалять сами базы данных (а это крайне маловероятно), я не думаю, что это когда-либо необходимо. Если приложение подключается к базе данных как владелец этой базы данных, оно фактически является суперпользователем в пределах этой базы данных, что не может быть слишком плохо.

У меня обычно есть приложения, обращающиеся к базе данных, используя учетную запись, аутентифицирующуюся в MD5. Например, можно настроить pg_hba.conf таким образом, чтобы учетная запись приложения была единственной учетной записью, которая может использовать аутентификацию MD5, а все остальные пользователи на локальном компьютере используют идентификацию идентификатора / равноправного узла.

Похоже, что вам здесь действительно нужно было объединить пользователя Apache и других пользователей Django, чтобы вы могли предоставить им доступ в массовом порядке.

В Postgresql есть способы предоставления разрешений сразу для всех таблиц и т. Д. В схеме, а также способ задания разрешений по умолчанию для новых объектов. Этот предыдущий ответ может быть полезен: Как создать пользователя только для чтения в PostgreSQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...