Seus dados no Couchbase acabaram de ficar mais seguros.
O Couchbase Server 7.0 introduziu Scopes e Collections para mapear melhor os modelos de dados relacionais e NoSQL. Mas a versão 7.0 também inclui alguns aprimoramentos adicionais para reforçar a segurança do a plataforma de dados. Mais especificamente, a segurança de controle de acesso baseado em função (RBAC) agora é suportada no nível de escopos e coleções individuais.
O que tudo isso significa para suas implementações do Couchbase? Vamos nos aprofundar.
Funções de segurança RBAC existentes no Couchbase
O Couchbase Server permitiu controles refinados do acesso do usuário à plataforma com segurança de controle de acesso baseado em função (RBAC) para administradores desde a versão 4.5 e para todos os usuários desde a versão 5.0. As Couchbase Collections foram introduzidas como um recurso de visualização para desenvolvedores no Couchbase Server 6.5 e são agora com suporte total no Couchbase Server 7.0.
Couchbase Funções de segurança RBAC foram divididos anteriormente em duas categorias:
- Administração e global: Essas funções estão associadas a privilégios em todo o cluster. Algumas dessas funções são para administradores que podem gerenciar as configurações do cluster, ler estatísticas ou reforçar a segurança. Outras são para usuários e aplicativos definidos pelo usuário que exigem acesso a recursos específicos de todo o cluster.
- Por balde: Essas funções estão associadas a um ou mais Buckets e suportam a leitura e a gravação das configurações do Bucket, o acesso aos dados e o gerenciamento de serviços, índices e procedimentos de replicação.
Um exemplo de RBAC usando escopos e coleções
Por exemplo, você pode ter concedido acesso de leitura a um Bucket chamado Viagens para um mecanismo de busca de hotéis confiável chamado Acme Co. com um usuário chamado acme usando um comando como este na interface de linha de comando de um cluster baseado em Linux. (Talvez seja necessário ajustar os caminhos se estiver usando outra plataforma).
|
1 2 3 |
/optar/couchbase/caixa/couchbase-cli usuário-gerenciar -c localhost:8091 -u Administrador -p senha \ --definir --rbac-nome de usuário acme --rbac-senha cbpass7beta --rbac-nome "Acme Co. (Hotel)" \ --funções leitor de dados[Viagens] --autenticação-domínio local |
Isso permitiria que seu parceiro de pesquisa de hotéis, a Acme Co., acessasse todos os dados que sua empresa está armazenando no Viagens Bucket do Couchbase. Isso pode incluir pedidos, inventário e outros dados não apenas de hotéis, mas também de companhias aéreas e outros produtos de viagem. Seguindo o princípio do menor privilégio, e se quiséssemos limitar os dados aos quais a Acme Co. tem acesso, em vez de permitir o acesso a todos dados de viagem em nossa empresa?
As coleções permitem que os documentos JSON em um Bucket do Couchbase sejam organizados, primeiro em Escopos, em que um Escopo é semelhante a um esquema em um banco de dados relacional (RDBMS). Em seguida, o escopo é subdividido em coleções individuais, de forma semelhante à estruturação de uma tabela em um banco de dados relacional tradicional.
O espaço de nomes em cada escopo é independente dos outros, portanto, você pode ter os mesmos nomes de coleção em escopos diferentes. Da mesma forma, as chaves de documentos precisam ser exclusivas apenas em uma coleção e, portanto, documentos com a mesma chave podem existir em diferentes coleções.
Antes da introdução de escopos e coleções, era comum organizar os documentos do Couchbase com base em prefixos-chave, como Orders::Europe::Customer1. As coleções oferecem muito mais flexibilidade nas chaves de documentos do que as disponíveis anteriormente.
Abaixo está um diagrama visual da relação entre Buckets, Scopes e Collections para um exemplo de conjunto de dados de viagens.
Para atualizações contínuas e para compatibilidade com versões anteriores, cada Bucket agora tem um Padrão Escopo e o Padrão O escopo tem um Padrão Coleção. A Padrão A coleção oferece compatibilidade com versões anteriores e uma referência direta ao Bucket mapeia automaticamente para a coleção Padrão Coleção. Além disso, na atualização, todos os dados existentes são automaticamente adicionados à Padrão Coleção.
Enquanto o Padrão A coleção é fornecida como um mecanismo de compatibilidade com versões anteriores; novos aplicativos devem ser escritos usando coleções nomeadas. Como você pode ver, as coleções permitem opções adicionais para organizar os dados em um Servidor Couchbase agrupamento.
Voltando ao exemplo acima, e se quiséssemos permitir que a Acme Co. visse apenas os dados do hotel, em vez de todos os dados de viagem da empresa? Com o Collections, agora você pode limitar os limites de acesso da Acme apenas ao escopo de sua escolha.
Por exemplo, se a Acme Co. precisasse verificar o inventário de quartos de hotel disponíveis, poderíamos restringir sua função RBAC para Hotel Coleção dentro do Inventário Escopo dentro do Viagens Balde.
Explicação da segurança de controle de acesso baseado em função (RBAC)
Como os escopos e as coleções funcionam com o controle de acesso baseado em função no banco de dados?
Um usuário que tem acesso a um Bucket herda o acesso aos Escopos e Coleções filhos desse Bucket. Da mesma forma, um usuário que tem acesso a um escopo herda o acesso às coleções filhas, mas não ao bucket pai.
Veja a seguir um detalhamento de como a nova segurança baseada em função funciona com o Collections:
| Função | Descrição |
leitor_de_dados[*] |
Pode ler dados em cada Bucket, incluindo cada Escopo e Coleção, em todo o cluster. |
leitor_de_dados[foo] |
Pode ler dados em todos os escopos e coleções somente dentro do Bucket foo. |
leitor_de_dados[foo:bar] |
Pode ler dados em todas as coleções dentro do escopo bar da caçamba foo. |
leitor_de_dados[foo:bar:baz] |
Pode ler dados somente na coleção baz que está localizado no escopo bar da caçamba foo. |
Para a Acme Co, o comando CLI é semelhante ao exemplo anterior, mas, em vez de definir o RBAC para um Bucket, você precisa ajustá-lo para permitir apenas um único Escopo e/ou Coleção.
Em nosso exemplo acima, queremos permitir que o acme acesso do usuário ao Hotel Coleção dentro do Inventário Escopo, portanto, nesse caso, a função seria data_reader[Travel:Inventory:Hotel].
|
1 2 3 |
/optar/couchbase/caixa/couchbase-cli usuário-gerenciar -c localhost:8091 -u Administrador -p senha \ --definir --rbac-nome de usuário acme --rbac-senha cbpass7beta --rbac-nome "Acme Co. (Hotel)" \ --funções leitor de dados[Viagens:Inventário:Hotel] --autenticação-domínio local |
Você deve estar se perguntando: quais funções de acesso de usuário podem ter um escopo e uma coleção definidos? Aqui está a lista completa:
Um exemplo prático de segurança RBAC com o Couchbase Server 7.0
Agora, vamos a mais alguns exemplos práticos que você pode experimente você mesmo no Couchbase Server 7.0. Como antes, estou usando um cluster baseado em Linux, portanto, talvez seja necessário ajustar os caminhos se estiver usando outra plataforma. Você precisará executar os serviços de dados, consulta e índice do Couchbase para este exemplo.
Primeiro, carregue o amostra de viagem Bucket em seu cluster.
|
1 2 |
enrolar -X POST -u Administrador:senha http://localhost:8091/sampleBuckets/install -d '["travel-sample"]' [] |
Em seguida, crie algumas coleções adicionais no Bucket. Usaremos o Padrão Escopo. Você precisará usar um usuário administrador do Bucket (ou privilégios superiores) para criar as novas coleções.
|
1 2 |
$ /optar/couchbase/caixa/couchbase-cli coleção-gerenciar --criar-coleção Padrão.hotel -c localhost \ -u Administrador -p senha --balde viagens-amostra |
|
1 |
SUCESSO: Coleção criado |
|
1 2 |
$ /optar/couchbase/caixa/couchbase-cli coleção-gerenciar --criar-coleção Padrão.aeroporto -c localhost \ -u Administrador -p senha --balde viagens-amostra |
|
1 |
SUCESSO: Coleção criado |
|
1 2 |
$ /optar/couchbase/caixa/couchbase-cli coleção-gerenciar --criar-coleção Padrão.companhia aérea -c localhost \ -u Administrador -p senha --balde viagens-amostra |
|
1 |
SUCESSO: Coleção criado |
|
1 2 |
$ /optar/couchbase/caixa/couchbase-cli coleção-gerenciar --criar-coleção Padrão.marco histórico -c localhost \ -u Administrador -p senha --balde viagens-amostra |
|
1 |
SUCESSO: Coleção criado |
Você também pode ver essas coleções na interface do usuário da Web do Couchbase Server, conforme mostrado abaixo.
Em seguida, carregaremos dados em cada uma das coleções com base em um campo que já existe nos documentos, chamado tipo. O documento tipo corresponde às novas coleções que acabamos de criar. Os dados são copiados para a coleção usando a linguagem de consulta N1QL na linha de comando. Observação: Precisamos ter o cuidado de escapar dos caracteres que o shell tentaria executar, como os backticks.
Se você tiver algum problema com a formatação ou com a execução do comando, aqui está uma imagem de exemplo de como o comando deve ser.
|
1 2 3 |
/optar/couchbase/caixa/cbq -u=Administrador -p=senha --script=\ "INSERT INTO \`travel-sample\`._default.hotel (KEY _key, VALUE _value)\\ SELECT meta().id _key, _value FROM \`travel-sample\` _value WHERE type='hotel'" |
|
1 2 3 |
/optar/couchbase/caixa/cbq -u=Administrador -p=senha --script=\ "INSERT INTO \`travel-sample\`._default.airport (KEY _key, VALUE _value)\\ SELECT meta().id _key, _value FROM \`travel-sample\` _value WHERE type='airport'" |
|
1 2 3 |
/optar/couchbase/caixa/cbq -u=Administrador -p=senha --script=\ "INSERT INTO \`travel-sample\`._default.airline (KEY _key, VALUE _value)\\ SELECT meta().id _key, _value FROM \`travel-sample\` _value WHERE type='airline'" |
|
1 2 3 |
/optar/couchbase/caixa/cbq -u=Administrador -p=senha --script=\ "INSERT INTO \`travel-sample\`._default.landmark (KEY _key, VALUE _value)\\ SELECT meta().id _key, _value FROM \`travel-sample\` _value WHERE type='landmark'" |
Vamos criar um índice primário no hotel Coleção como administrador:
|
1 2 |
/optar/couchbase/caixa/cbq -u=Administrador -p=senha --script=\ "CREATE PRIMARY INDEX `hotel-primary` ON \`travel-sample\`._default.hotel" |
Agora, vamos obter uma lista de todos os usuários e funções:
|
1 |
/optar/couchbase/caixa/couchbase-cli usuário-gerenciar -c localhost:8091 -u Administrador -p senha --lista |
|
1 |
[] |
Como você pode ver acima, no momento temos apenas o administrador interno e nenhum usuário adicional. Portanto, a saída do comando está vazia, como esperado.
Em seguida, vamos criar um usuário, John Doe. Daremos a John uma função de leitor de dados e uma função de seleção de consulta na tabela hotel Coleção, que está localizada no Padrão Escopo.
|
1 2 3 4 |
/optar/couchbase/caixa/couchbase-cli usuário-gerenciar -c localhost:8091 -u Administrador -p senha \ --definir --rbac-nome de usuário jdoe --rbac-senha cbpass7beta --rbac-nome "John Doe" \ --funções leitor de dados[viagens-amostra:Padrão:hotel],consulta_seleção[viagens-amostra:Padrão:hotel] \ --autenticação-domínio local |
|
1 |
SUCESSO: Usuário jdoe definir |
Novamente, você também pode fazer isso na interface do usuário da Web.
Em seguida, verificamos se John Doe tem as permissões específicas para o hotel Coleção. Quando John tenta ler todo o Bucket de amostras de viagem, ele recebe um erro de permissão negada.
|
1 |
/optar/couchbase/caixa/couchbase-cli usuário-gerenciar -c localhost:8091 -u Administrador -p senha --lista |
|
1 2 |
/optar/couchbase/caixa/cbq -u=jdoe -p=cbpass7beta --script=\ "SELECT type, name, hotel.country FROM \`travel-sample\` LIMIT 5;" |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
SELECIONAR tipo, nome, hotel.país DE `viagens-amostra` LIMITE 5; { .... "resultados": [ ], "erros": [ { "código": 13014, "msg": "O usuário não tem credenciais para executar consultas SELECT em default:travel-sample. Adicione a função query_select em default:travel-sample para permitir a execução da consulta." } ], "status": "fatal", ... |
Desta vez, como John, vamos selecionar cinco hotéis apenas da hotel Coleção do amostra de viagem Bucket, que John faz ter acesso a.
|
1 2 |
/optar/couchbase/caixa/cbq -u=jdoe -p=cbpass7beta --script=\ "SELECT type, name, hotel.country FROM \`travel-sample\`._default.hotel LIMIT 5;" |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
SELECIONAR tipo, nome, hotel.país DE `viagens-amostra`.Padrão.hotel LIMITE 5; { "requestID": "3cdc2fa8-b0cf-411a-a325-a1534280087a", "assinatura": { "país": "json", "name" (nome): "json", "tipo": "json" }, "resultados": [ { "país": "Reino Unido", "name" (nome): "Albergue da Juventude de Medway", "tipo": "hotel" }, { "país": "Reino Unido", "name" (nome): "O Balmoral Guesthouse", "tipo": "hotel" }, { "país": "França", "name" (nome): "Os Robins", "tipo": "hotel" }, { "país": "França", "name" (nome): "Le Clos Fleuri", "tipo": "hotel" }, { "país": "Reino Unido", "name" (nome): "Glasgow Grand Central", "tipo": "hotel" } ], "status": "sucesso", ... } |
Como mostrado nos exemplos acima, você pode qualificar uma função Data Reader e Query Select com um confinamento Scope e Collection.
Divirta-se e proteja suas coleções com nossa nova funcionalidade de controle de acesso baseado em funções!
Mais recursos sobre a versão 7.0 do Couchbase
- O que há de novo no Couchbase Server 7.0
- Notas de versão do Couchbase 7.0
- Como os escopos e coleções simplificam as implementações de aplicativos multilocatários no Couchbase
- O suporte ao cliente do Enterprise Edition está disponível por meio de seus canais de suporte regulares. O suporte da comunidade está disponível nos fóruns do Couchbase
Deseja experimentar você mesmo a segurança RBAC no Couchbase?
Dê uma olhada no Couchbase hoje mesmo
- O que há de novo no Couchbase Server 7.0
- Notas de versão do Couchbase 7.0
- Como os escopos e coleções simplificam as implementações de aplicativos multilocatários no Couchbase
- O suporte ao cliente do Enterprise Edition está disponível por meio de seus canais de suporte regulares. O suporte da comunidade está disponível nos fóruns do Couchbase
Dê uma olhada no Couchbase hoje mesmo





Oi~ Obrigado por sua postagem.
Acho que há um erro de digitação aqui, por isso estou deixando um comentário.
//
Vamos criar um usuário, John Doe, que tem uma função de leitor de dados e de seleção de consulta na coleção de hotéis, que está localizada na coleção _default.
//
Acho que _default Collection >>> _default Scope
Está certo?
Mais uma vez, obrigado por sua postagem útil.
Olá ckdgur. Fico feliz em saber que a postagem do blog é útil. Boa observação, é de fato um erro de digitação. Já o corrigi. Além disso, muito obrigado por dar uma olhada no Couchbase 7 Beta!
Hi
Você pode confirmar que o "Acesso ao aplicativo" pode ter um escopo e uma coleção definidos?
De acordo com a documentação, o Application Access é traduzido como full_bucket_access e está obsoleto e, quando tentei, apenas o nome do bucket era suportado.
Não é possível atribuir funções ao usuário porque as seguintes funções são desconhecidas, malformadas ou os parâmetros de função são indefinidos: [bucket_full_access[travel-sample:inventory]]"