Как надежно сохранить мой пароль администратора CouchDB? - PullRequest
4 голосов
/ 24 февраля 2011

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

Итак, я закончил с чем-то вроде этого:

Помимо всего прочего, у меня есть администратор сервера, который в основном является богом в моем экземпляре CouchBD.

Затем я создал базу данных с именем «mydatabase» (например) и добавил роль «mydatabase_dba» в качестве администратора, а также роль «mydatabase_user» в качестве читателя.

Я также создал базу данных с именем "_users", которая содержит всех администраторов и пользователей базы данных с их ролями, а также проектный документ с именем "_auth", который управляет авторизацией.

Только администратор сервера является администратором этой базы данных, и я добавил пользователей с ролью «mydatabase_dba» в качестве читателей. Затем для тех из вас, кто знает об этом, я изменил поле «validate_doc_update» в документе «_auth», чтобы пользователи с ролью «mydatabase_dba» могли иметь дело только с пользователями с ролью «mydatabase_user».

Итак, подведем итог к этому моменту:

  • Администратор сервера все еще бог
  • пользователи с ролью "mydatabase_user" могут подключаться к "mydatabase", но они просто читатели
  • пользователи с ролью "mydatabase_dba" являются администраторами "mydatabase"
  • пользователи с ролью "mydatabase_dba" могут подключаться к базе данных "_users", где они являются читателями
  • пользователи с ролью "mydatabase_dba" могут управлять только пользователями роли "mydatabase_user" в "_users"

Надеюсь, это понятно: D

Теперь я могу создать приложение, которое само не будет управлять пользователями, но позволит пользователям подключаться к CouchDB напрямую (прозрачно).

Проблема возникает, когда речь идет о создании / обновлении / удалении пользователей.

Поскольку только пользователи с ролью "mydatabase_dba" могут иметь доступ к базе данных "_users" и работать с пользователями с ролями "mydatabase_user", мне нужно в какой-то момент подключиться к CouchDB в качестве администратора db.

У меня есть два решения:

  • Создайте пользовательский интерфейс в моем приложении, который позволит администратору подключаться и делать то, что он должен

или

  • Создайте еще немного кода и позвольте приложению делать это автоматически, это решение, которое я предпочитаю, но проблема в том, что я должен хранить учетные данные администратора ...

Извините за длинное вступление, но сначала мне пришлось описать пейзаж:)

Вчера я создал сообщение о том, как можно защитить соединение между моим приложением и экземпляром CouchDB: здесь

Решение, которое мне было дано, заключается в использовании HTTP через SSL (/ TLS) для защиты связи. Я в порядке с этим, но теперь у меня есть другая проблема, может быть, я параноик, но поскольку мое приложение должно будет подключаться как «mydatabase_dba», я должен где-то хранить его учетные данные.

Но как их надежно хранить? Как говорилось в моем предыдущем посте, даже если я сохраню хешированный пароль вместо простого текстового пароля, если злоумышленник получит доступ к исходному коду моего приложения, он получит мои учетные данные администратора ...

1 Ответ

5 голосов
/ 24 февраля 2011

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

Никогда не передавайте этот текстовый файл в менеджер исходного кода (Subversion, Git и т. Д..)! Размещение файла в работающей системе должно быть шагом в процедуре установки.

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