Question

Je suis actuellement en utilisant MongoDB pour enregistrer les journaux d'application, et alors que je suis tout à fait satisfait de la performance et d'être en mesure de vider les données structurées arbitraires dans les enregistrements du journal, je suis troublé par la mutabilité des enregistrements du journal une fois stockés .

Dans une base de données traditionnelle, je structurer les subventions pour mes tables de journaux tels que l'utilisateur de l'application avait des privilèges INSERT et SELECT, mais pas UPDATE ou DELETE. De même, dans CouchDB, je pourrais écrire une fonction mise à jour de validateur qui a rejeté toute tentative de modifier un document existant.

Cependant, je suis incapable de trouver un moyen de limiter les opérations sur une base de données MongoDB ou d'une collection au-delà des trois niveaux d'accès (pas d'accès, en lecture seule, « mode dieu ») documenté dans le sujet de la sécurité sur le wiki MongoDB

Quelqu'un at-il déployé MongoDB comme un magasin de documents dans un contexte où immuabilité (ou au moins le suivi des modifications) pour les documents était une exigence? Quelles astuces ou techniques avez-vous utilisé pour faire en sorte que le code d'application mal écrite ou malveillant ne pouvait modifier ou détruire des enregistrements de journaux existants? Ai-je besoin d'envelopper mon enregistrement de MongoDB dans une couche de service qui applique la politique d'écriture seule, ou puis-je utiliser une combinaison de configuration, hacking de requête et de réplication pour assurer un enregistrement cohérent, faisable audit est maintenue?

Était-ce utile?

La solution

Je dirais que le mieux serait de conclure l'accès à MongoDB dans une couche de service qui impose vos contrats spécifiques. Nous ne faisons pas beaucoup de la manière du contrôle d'accès à grains fins, car il y a tellement de cas que la résolution correctement tous est difficile à obtenir le droit. Donc, pour la plupart, il est à la couche d'application pour mettre en œuvre ce genre de contrôles.

Autres conseils

Pour ajouter un seulement écrire (au niveau de la collection) utilisateur au MongoDB procédez comme suit.

Dites que vous voulez avoir un utilisateur ne peut écrire ( insérer seulement) à un certaine collection sur une certaine base de données.

Créer un createuser.js de fichier avec le contenu suivant:

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 ] );
}

Et exécuter cette commande de ligne

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

Cela crée un utilisateur avec le nom d'utilisateur utilisateur1 avec mot de passe pass1 et cet utilisateur a écriture seule accès à sa base de données yourdb collection col1 .

Un effet secondaire de ce rôle est que rolename est créé. Si vous avez un utilisateur existant qui devrait avoir une écriture que l'accès à la même collection, accorder le rôle rolename à cet utilisateur existant.

Vous pouvez utiliser et modifier le code fourni ci-dessus.)

Dans MongoDB 1.3.2+, vous pouvez ajouter une restriction à l'utilisateur:

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

Mais il n'existant maintenant pas mieux. Peut-être que vous pouvez ajouter une demande de fonctionnalité

voir les informations dans la documentation MongoDB: http://www.mongodb.org / affichage / DOCS / sécurité + et + authentification

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top