Вопрос

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

В традиционной базе данных я бы структурировал разрешения для своих таблиц журналов таким образом, чтобы у пользователя приложения были привилегии INSERT и SELECT, но не UPDATE или DELETE.Аналогично, в CouchDB я мог бы написать функцию проверки обновлений, которая отклоняла бы все попытки изменить существующий документ.

Однако мне не удалось найти способ ограничить операции с базой данных или коллекцией MongoDB за пределами трех уровней доступа (нет доступа, только чтение, «режим бога»), описанных в тема безопасности в вики MongoDB.

Кто-нибудь еще развернул MongoDB в качестве хранилища документов в условиях, когда неизменяемость (или, по крайней мере, отслеживание изменений) документов была требованием?Какие приемы или приемы вы использовали, чтобы гарантировать, что плохо написанный или вредоносный код приложения не сможет изменить или уничтожить существующие записи журнала?Нужно ли мне включать ведение журнала MongoDB в уровень обслуживания, который обеспечивает соблюдение политики только записи, или я могу использовать некоторую комбинацию конфигурации, взлома запросов и репликации, чтобы обеспечить сохранение согласованной и поддающейся аудиту записи?

Это было полезно?

Решение

Я бы сказал, что лучше всего было бы объединить доступ к MongoDB на уровне обслуживания, который обеспечивает соблюдение ваших конкретных контрактов.Мы не делаем многого в плане детального контроля доступа, потому что существует так много разных случаев, что правильно решить все из них сложно.Таким образом, реализация такого рода элементов управления по большей части зависит от уровня приложения.

Другие советы

Чтобы добавить писать только (на уровне коллекции) пользователь MongoDB делает следующее.

Скажем, вы хотите иметь пользователя, который могу только написать (вставлять только) к определенная коллекция в определенной базе данных.

Создать файл createuser.js со следующим содержанием:

function createCollectionWriter(database, username, password, rolename, collection)
{
    db.getSiblingDB(database).createUser({
        user : username,
        pwd  : password,
        roles : [ ]
    });

    db.getSiblingDB(database).createRole({
        role  : rolename,
        privileges : [
        {
            resource : { db : database, "collection" : collection },
            actions  : [ "insert" ]
        }
        ],
        roles : []
    });

    db.getSiblingDB(database).grantRolesToUser(username, [ rolename ] );
}

И выполните это из командной строки

$ mongo --eval="load('createuser.js'); createCollectionWriter('yourdb', 'user1', 'pass1', 'rolename', 'col1')"

Это создает пользователя с именем пользователя пользователь1 с паролем пройти1 и у этого пользователя есть писать только доступ к базе данных вашБД коллекция столбец 1.

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

Не стесняйтесь использовать и изменять приведенный выше код :).

В MongoDB 1.3.2+ вы можете добавить некоторые ограничения для пользователя:

db.addUser("guest", "passwordForGuest", true)

Но оно существует только сейчас, а не лучше.Может быть, вы можете добавить какой-нибудь запрос на функцию

см. информацию в документации MongoDB: http://www.mongodb.org/display/DOCS/Security+and+Authentication

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top