A autenticação e a autorização foram amplamente aprimoradas no Couchbase Server 5.0. Há algum tempo, estamos escrevendo sobre os novos recursos RBAC na visualização para desenvolvedores.
- Autenticação e autorização com RBAC - introdução / parte 1
- Autenticação e autorização com RBAC (Parte 2) - gerenciamento de usuários
- Métodos de autenticação do SDK aprimorados - Couchbase 5.0 - uma introdução com Python, Java, PHP e .NET
Agora que o Couchbase Server 5.0 Beta foi lançado, estou escrevendo uma postagem mais detalhada no blog sobre como usar o Couchbase .NET SDK junto com esses novos recursos.
Os exemplos de código completo usados nesta postagem do blog são disponível para você no Github.
Criar um balde
Como mencionei nas postagens anteriores, os dias dos compartimentos com senhas acabaram. O futuro pertence aos usuários - usuários que têm permissão(s) específica(s) para baldes específicos.
Vamos começar criando um bucket. Na interface do usuário do Couchbase, faça login como o administrador que você criou quando instalou o Couchbase. Vá para "Buckets" e clique em "ADD BUCKET" (canto superior direito). Você verá a caixa de diálogo "Add Data Bucket". Observe que não há mais um campo "password" (nem mesmo em "Advanced bucket settings").
Dê um nome ao bucket e uma certa quantidade de memória e clique em "Add Bucket". Agora você tem um bucket. Mas, além de um administrador na interface do usuário, ninguém pode acessar esse bucket ainda.
Criar um usuário
Para obter acesso a esse bucket, é necessário criar um usuário. No Couchbase 5.0, os "usuários" são um recurso totalmente novo, que traz recursos mais avançados de autenticação e autorização para o Couchbase Server.
Enquanto ainda estiver conectado como administrador, vá para "Security" (Segurança) para ver uma lista de usuários. Clique em "ADD USER" (canto superior direito).
Crie um usuário com o nome e a senha que desejar. Você pode escolher quais funções o usuário tem e para quais buckets (quando aplicável). Vamos atribuir a esse usuário funções de Data Writer e Data Reader, para o bucket que acabou de ser criado (por exemplo, "mybucket"), mas NÃO quaisquer funções de Query.
Depois que o usuário é adicionado, você pode passar o mouse sobre as funções para obter uma descrição do que a função significa.
Autenticação e autorização com o SDK do Couchbase .NET
Agora que temos um bucket e um usuário, vamos ver como usá-los com o SDK do .NET.
Comece criando um Aglomerado
objeto.
1 2 3 4 |
var agrupamento = novo Aglomerado(novo Configuração de cliente { Servidores = novo Lista<Uri> { novo Uri("http://localhost:8091") } }); |
Você tem um cluster, mas seu programa ainda não foi autenticado. Use um PasswordAuthenticator
para especificar as credenciais. Em seguida, use esse objeto com o objeto Autenticar
método. No exemplo abaixo, estou usando credenciais incorretas.
1 2 |
var autenticador = novo PasswordAuthenticator("myuser", "wrongpassword" (senha incorreta)); agrupamento.Autenticar(autenticador); |
Agora, se eu tentar executar uma operação como OpenBucket
no cluster, uma exceção é lançada.
1 2 3 4 5 6 7 8 9 |
tentar { var balde = agrupamento.OpenBucket("mybucket"); } captura (Exceção ex) { Console.WriteLine("Erro ao obter o balde".); Console.WriteLine(ex.Mensagem); } |
Agora, vamos tentar novamente usando as credenciais corretas. A autenticação funcionará. Mas vamos falar sobre autorização a seguir.
Lembre-se de que só atribuí a esse usuário funções de gravador de dados e leitor de dados (para o mybucket). Portanto, se eu me autenticar e inserir um documento agora, ele funcionará.
1 2 3 4 5 6 7 8 9 10 11 |
var agrupamento = novo Aglomerado(novo Configuração de cliente { Servidores = novo Lista<Uri> { novo Uri("http://localhost:8091") } }); var autenticador = novo PasswordAuthenticator("myuser", "senha"); agrupamento.Autenticar(autenticador); var balde = agrupamento.OpenBucket("mybucket"); // inserir um documento, isso deve ser permitido var resultado = balde.Inserir(Guia.NovoGuia().ToString(), novo {foo = "bar"}); Console.WriteLine("A inserção foi bem-sucedida: " + resultado.Sucesso); |
Mas se eu tentasse, por exemplo, executar um Consulta N1QL (SQL para JSON)ele falhará. Isso ocorre porque esse usuário não está autorizado a executar consultas.
1 2 3 |
var resultado da consulta = balde.Consulta<int>("SELECT COUNT(1) FROM `" + balde.Nome + "`"); Console.WriteLine("A consulta foi bem-sucedida: " + resultado da consulta.Sucesso); resultado da consulta.Erros.Para cada(e => Console.WriteLine("Error: " + e.Mensagem)); |
Estou apenas fazendo uma simples COUNT(1)
consulta de agregação. Como esse usuário não está autorizado, eis o que é exibido:
Mais uma coisa
Se você estiver preocupado com o efeito que isso terá na atualização do Couchbase Server 4.x para o Couchbase Server 5.0, aqui vai uma dica. Se você criar um usuário com o mesmo nome do bucket (por exemplo, um bucket chamado "foo" e um usuário chamado "foo"), as APIs antigas do Couchbase .NET que ainda esperam uma senha de bucket funcionarão como antes. Por enquanto, basta atribuir a esse usuário a função "Cluster Admin". Essa é uma boa solução temporária até que você possa reprojetar seu sistema para usar uma abordagem regimentada para a função.
Resumo
O Couchbase Server 5.0 já está disponível em versão beta! Esses recursos de autenticação baseada em função (RBAC) fazem do Couchbase um líder em segurança de banco de dados de documentos, e estou pessoalmente muito satisfeito que o Couchbase esteja indo nessa direção. A segurança é importante, mas muitas vezes é negligenciada pelos desenvolvedores.
Se você tiver alguma dúvida, por favor Faça suas perguntas nos fóruns do Couchbasedeixe um comentário abaixo, ou me envie uma mensagem no Twitter @mgroves.