Em um mundo em que os vazamentos de dados estão se tornando cada vez mais comuns, a necessidade de proteger o banco de dados e os aplicativos da Web torna-se cada vez mais importante. Eu, como muitos outros desenvolvedores, trabalhei com bancos de dados relacionais, como MySQL e Oracle, em que as permissões de controle de acesso podiam ser colocadas nos bancos de dados e nas tabelas dentro deles. Agora, com o Couchbase 5.0, esse mesmo controle de granulação fina pode ser aplicado em clusters, buckets e muito mais.
Veremos alguns exemplos de como o controle de acesso baseado em função (RBAC) do Couchbase Server pode ser usado para bloquear o banco de dados e protegê-lo melhor dos usuários mal-intencionados que tentam explorá-lo.
Sejamos claros desde o início: ter contas com controle de acesso no seu banco de dados não será uma solução definitiva quando se trata de proteger seus dados. Você ainda deve seguir as práticas recomendadas quando se trata de projetar seu aplicativo Web, mas ter o controle de acesso no nível do banco de dados ajudará significativamente a sua causa.
Com o RBAC do Couchbase Server, é possível ter qualquer número de contas que possam ser usadas para acessar o banco de dados.
Essas contas terão privilégios como leitura, gravação, execução, gerenciamento e descarga.
Vamos brincar com a criação de uma conta e descobrir o que acontece quando temos e não temos os privilégios corretos para realizar determinadas tarefas.
Criação de um novo usuário para o Couchbase Server
Supondo que você já tenha obtido uma cópia do Couchbase Server 5.0 ou mais recente, faça login no cluster ou na instância usando seu nome de usuário e senha de administrador.
O nome de usuário e a senha administrativos não vão desaparecer agora que o controle de acesso baseado em função está disponível. Pense nele como o usuário raiz do cluster do banco de dados.
Depois de fazer login, localize a seção Segurança e selecione ADICIONAR USUÁRIO.
Ao adicionar um usuário, certifique-se de escolher uma combinação forte de nome de usuário e senha.
Há várias funções para escolher ao criar um novo usuário. Por enquanto, escolha a função Leitor de dados da função Funções de dados seção. Estamos fazendo isso porque queremos ver o que acontece quando tentamos usar uma conta de usuário com poucas permissões. Para obter o máximo de segurança, certifique-se de atribuir apenas os Buckets necessários ao usuário e não use a seção todos [*] opção.
Agora vamos dar uma olhada na tentativa de usar essa nova conta com o Couchbase.
Execução de tarefas com o shell do Couchbase
Ao instalar o Couchbase, você recebe o Couchbase Shell, que é uma ferramenta CLI que pode fazer várias coisas com o banco de dados.
Se estiver usando um Mac, execute o seguinte comando:
1 |
/Aplicativos/Couchbase Servidor.aplicativo/Conteúdo/Recursos/couchbase-núcleo/caixa/cbq -u nome de usuário -p senha |
O comando acima iniciará o Couchase Shell (CBQ) usando o nome de usuário e a senha especificados. Certifique-se de usar o nome de usuário e a senha do usuário RBAC que você criou anteriormente.
Se você estiver usando o Microsoft Windows, o CBQ deverá estar localizado no seguinte local:
1 |
C:\Programa Arquivos\Couchbase\Servidor\caixa\cbq.exe -u nome de usuário -p senha |
Da mesma forma, se estiver usando Linux, verifique se há CBQ aqui:
1 |
/optar/couchbase/caixa/cbq -u nome de usuário -p senha |
Se você quiser saber mais sobre o Couchbase Shell, dê uma olhada na seção documentação oficial.
Com uma conexão bem-sucedida ao Couchbase Server usando o CBQ, vamos tentar executar uma consulta:
1 |
SELECT * DE `padrão`; |
É claro que estamos supondo que você tenha um Bucket chamado padrão e seu usuário tem acesso a ele. Lembre-se de que só temos o Leitor de dados em nosso usuário, e não uma das funções Funções de consulta. Isso significa que você provavelmente receberá um erro parecido com o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "requestID": "aca002c6-58d5-4754-9e33-325eef47f46b", "assinatura": { "*": "*" }, "resultados": [ ], "erros": [ { "código": 13014, "msg": "O usuário não tem credenciais para executar consultas SELECT no bucket padrão. Adicione a função query_select no padrão para permitir que a consulta seja executada." } ], "status": "parado", "métricas": { "elapsedTime" (tempo decorrido): "1.703462ms", "executionTime": "1.690334ms", "resultCount": 0, "resultSize": 0, "errorCount": 1 } } |
Isso é ótimo porque não queremos que nosso usuário possa executar consultas. O Funções de dados Os privilégios são apenas para operações de valor-chave, não para N1QL.
Volte ao Painel de controle administrativo do Couchbase e altere as funções do usuário. Desta vez, dê ao usuário a função Seleção de consulta função de Funções de consulta. Se você tentar executar a consulta novamente no CBQ, ela deverá ser bem-sucedida.
Inclusão de controles de acesso baseados em função em um aplicativo
Em algum momento, você precisará criar um aplicativo da Web que se comunique com o Couchbase usando um dos vários SDKs do Couchbase. A partir do Couchbase 5.0, um usuário RBAC deve estar disponível e o SDK deve se autenticar com ele, caso contrário, ocorrerá um erro ao tentar abrir um Bucket.
Se você for um desenvolvedor do Node.js, poderá fazer algo parecido com isto:
1 2 3 |
var agrupamento = novo Couchbase.Aglomerado("couchbase://host"); agrupamento.autenticar("nome de usuário", "senha"); var balde = agrupamento.openBucket("default"); |
Observe que o openBucket
não recebe mais uma senha do Bucket. Em vez disso, estamos contando com a função autenticar
e nossos controles de acesso.
Cada um dos SDKs segue uma abordagem muito semelhante à autenticação. Para obter mais informações, consulte a documentação do SDK na seção Portal do desenvolvedor do Couchbase.
Conclusão
A capacidade de definir privilégios com base em clusters, Buckets e até mesmo serviços é uma grande vitória quando se trata de proteger seu banco de dados NoSQL. Ao dar aos usuários o mínimo necessário para que eles funcionem, você está ajudando a eliminar a possibilidade de vazamento de dados ou de alguma outra atividade mal-intencionada.