Pergunta

Atualmente estou usando MongoDB para logs de aplicativos recordes, e enquanto eu estou muito feliz com o desempenho ea com ser capaz de despejar arbitrárias dados estruturados em registros de log, eu estou preocupado com a mutabilidade de registros de log, uma vez armazenadas .

Em um banco de dados tradicional, gostaria de estruturar os subsídios para os meus tabelas de registro de tal forma que o usuário do aplicativo tiveram INSERT e privilégios SELECT, mas não atualizar ou excluir. Da mesma forma, no CouchDB, eu poderia escrever uma função de atualização validador que rejeitou todas as tentativas para modificar um documento existente.

No entanto, eu fui incapaz de encontrar uma maneira de restringir as operações em um banco de dados MongoDB ou coleção para além dos três níveis de acesso (sem acesso, só de leitura, "God Mode") documentada no tema segurança no wiki MongoDB

Tem mais alguém implantado MongoDB como um armazenamento de documentos em um ambiente onde a imutabilidade (ou pelo controle de alterações menos) para documentos era um requisito? Que truques ou técnicas que você usou para garantir que mal escrito ou código de aplicativo malicioso não poderia modificar ou destruir registros de log existentes? Eu preciso envolver minha logging MongoDB em uma camada de serviço que impõe a política somente para gravação, ou posso usar uma combinação de configuração, consulta pirataria, e replicação para garantir uma consistente, registro de auditoria-poder é mantido?

Foi útil?

Solução

Eu diria que a melhor aposta seria a de encerrar o acesso ao MongoDB em uma camada de serviço que impõe seus contratos específicos. Nós não fazemos muito na forma de controle de acesso de grão fino, porque há tantos casos diferentes que resolver todos eles corretamente é complicado de acertar. Assim, para a maior parte é até a camada de aplicação para implementar esse tipo de controlo.

Outras dicas

Para adicionar um escrita somente (em nível coleção) usuário para o MongoDB faça o seguinte.

Digamos que você queira ter um usuário que só pode escrever ( Inserir apenas) para a <> determinada coleção forte em um determinado banco de dados.

Criar um createuser.js arquivo com seguinte conteúdo:

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

E executar este a partir de linha de comando

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

Isso cria um usuário com nome de usuário user1 com a senha pass1 e este usuário tem escrita somente acesso ao banco de dados do yourdb coleção col1 .

Um efeito colateral disso é que o papel rolename é criado. Se você usuário que deve ter uma gravação único acesso à mesma coleção, papel de subvenção existente rolename para que o usuário existente.

Sinta-se livre para usar e modificar o código fornecido acima:.)

No MongoDB 1.3.2 ou mais recente, você pode adicionar um pouco de restrição no usuário:

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

Mas é apenas existente agora não melhor. Talvez você pode adicionar algum pedido de recurso

ver informações na documentação do MongoDB: http://www.mongodb.org / display / DOCS / Security + e + Authentication

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top