Pregunta

Actualmente estoy usando MongoDB para grabar registros de la aplicación, y aunque estoy bastante contento con el rendimiento y con la posibilidad de volcar los datos estructurados arbitrarias en los registros de registro, estoy preocupada por la mutabilidad de las entradas de registro, una vez almacenado .

En una base de datos tradicional, me gustaría estructurar las subvenciones para mis tablas de registro de tal manera que el usuario de la aplicación de inserción y elija tenía privilegios, pero no actualizar o borrar. Del mismo modo, en CouchDB, podría escribir una función de actualización validador que rechaza todos los intentos de modificar un documento existente.

Sin embargo, he sido incapaz de encontrar una manera de restringir las operaciones en una base de datos MongoDB o la colección más allá de los tres niveles de acceso (sin acceso, sólo lectura, "Modo Dios") se documenta en el tema de seguridad en el wiki de MongoDB

¿Alguien más ha desplegado MongoDB como un almacén de documentos en un entorno en el que la inmutabilidad (o al menos el cambio de seguimiento) para los documentos era un requisito? ¿Qué trucos o técnicas ha empleado para asegurarse de que el código de aplicación mal escrito o malicioso no puede modificar o destruir los archivos de registro existentes? ¿Es necesario para envolver mi registro MongoDB en una capa de servicio que hace cumplir la política de sólo escritura, o puedo usar una combinación de la configuración, la piratería consulta, y la replicación para garantizar un registro coherente, auditoría-poder se mantiene?

¿Fue útil?

Solución

Yo diría que la mejor opción sería la de concluir el acceso a MongoDB en una capa de servicio que hace cumplir sus contratos específicos. Nosotros no hacemos mucho en la forma de control de acceso de grano fino debido a que hay muchos casos diferentes que resolver todas correctamente es difícil de hacerlo bien. Así que en su mayor parte le toca a la capa de aplicación para implementar ese tipo de controles.

Otros consejos

Para añadir un usuario sólo escritura (en el nivel de colección) a la MongoDB haga lo siguiente.

Digamos que quiere tener un usuario que sólo puede escribir ( insertar solamente) para un cierta colección en una cierta base de datos.

Crear un archivo con createuser.js siguiente contenido:

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

y ejecutar esto desde la línea de comandos

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

Esto crea un usuario con nombre de usuario usuario1 con la contraseña pass1 y este usuario tiene sólo escritura acceso a la base de datos de basedatos colección col1 .

Un efecto secundario de esto es que la función nombre de rol se crea. Si ha de usuario que debe tener una escritura sólo el acceso a la misma colección existente, conceder papel nombre de rol a ese usuario existente.

No dude en utilizar y modificar el código proporcionado anteriormente:.)

En MongoDB 1.3.2 o superior se puede añadir un poco de restricción de usuario:

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

Sin embargo, sólo está vigente ahora no mejor. Tal vez se puede añadir un poco de solicitud de función

ver la información en la documentación MongoDB: http://www.mongodb.org / visualización / docs / Seguridad + y + autenticación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top