Domanda

Attualmente sto usando MongoDB per registrare i log di applicazioni, e mentre io sono abbastanza soddisfatto sia le prestazioni e con l'essere in grado di scaricare dati strutturati arbitrari in record di log, io sono turbato dalla mutevolezza di record di log, una volta immagazzinata .

In un database tradizionale, vorrei strutturare le borse di studio per i miei tabelle del log in modo tale che l'utente dell'applicazione aveva INSERISCI e privilegi, ma non aggiornare o eliminare. Analogamente, in CouchDB, ho potuto scrivere una funzione di aggiornamento validatore che respinto tutti i tentativi di modificare un documento esistente.

Comunque, sono stato in grado di trovare un modo per limitare le operazioni su un database MongoDB o raccolta al di là dei tre livelli di accesso (accesso, sola lettura, "God Mode") documentato nel tema di sicurezza sulla wiki MongoDB

Qualcun altro ha schierato MongoDB come un negozio documento in un ambiente dove l'immutabilità (o almeno il rilevamento delle modifiche) per i documenti era un requisito? Quali trucchi o tecniche hai usato per assicurare che il codice dell'applicazione mal scritto o dannoso non poteva modificare o distruggere i record di registrazione esistenti? Ho bisogno di avvolgere la mia registrazione MongoDB in un livello di servizio che rafforza la politica di sola scrittura, o posso utilizzare una combinazione di configurazione, interrogazione di hacking, e la replica per assicurare un record di controllo-in grado resti costante?

È stato utile?

Soluzione

Direi che la cosa migliore sarebbe quella di avvolgere l'accesso ad MongoDB in un livello di servizio che impone vostri contratti specifici. Noi non facciamo molto in termini di controllo di accesso a grana fine, perché ci sono tanti casi differenti che risolvere tutti loro è correttamente difficile da ottenere. Così, per la maggior parte è fino al livello di applicazione per implementare questo tipo di controlli.

Altri suggerimenti

Per aggiungere un utente scrivere solo (a livello di raccolta) per il MongoDB procedere come segue.

Dire che si desidera avere un utente che può scrivere solo ( inserire solo) ad un certa collezione su un determinato database.

Creare un file createuser.js con i seguenti contenuti:

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

ed eseguire questo dalla riga di comando

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

Questo crea un utente con nome utente user1 con la password pass1 e questo utente ha scrivere solo l'accesso al database di yourdb raccolta col1 .

Un effetto collaterale di questo è che il ruolo rolename viene creato. Se si è utenti che dovrebbe avere una scrittura unico accesso alla stessa collezione esistente, concedere ruolo rolename per l'utente esistente.

Sentitevi liberi di utilizzare e modificare il codice fornito in precedenza:.)

In MongoDB versione 1.3.2 e successive è possibile aggiungere alcune restrizioni in utente:

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

Ma è solo esistente ora non meglio. Forse si può aggiungere un po 'richiesta di funzionalità

vedere le informazioni nella documentazione MongoDB: http://www.mongodb.org / display / DOCS / Sicurezza + e + autenticazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top