Вчера я потратил много времени на настройку своего экземпляра 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», я должен где-то хранить его учетные данные.
Но как их надежно хранить? Как говорилось в моем предыдущем посте, даже если я сохраню хешированный пароль вместо простого текстового пароля, если злоумышленник получит доступ к исходному коду моего приложения, он получит мои учетные данные администратора ...