Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Gerenciar usuários e roles em sistemas autogerenciados

Nesta página

  • Pré-requisitos
  • Criação de roles definidas pelo usuário
  • Modificar acesso a um usuário existente
  • Como modificar a senha de um usuário existente
  • Exibição das roles de um usuário
  • Como ver os privilégios de um role

Este tutorial fornece exemplos de gerenciamento de usuários e roles no modelo de autorização do MongoDB para implementações autogerenciadas. Para criar um novo usuário, consulte Criar um usuário em sistemas autogerenciados.

Se você tiver ativado o controle de acesso para o seu sistema, deverá autenticar como usuário com os privilégios necessários especificados em cada seção. Para executar as operações listadas neste tutorial, os administradores de usuário exigem a função userAdminAnyDatabase ou userAdmin nos bancos de dados específicos. Para obter detalhes sobre como adicionar um administrador de usuário como o primeiro usuário, consulte Habilitar controle de acesso em sistemas autogerenciados

Observação

Para criar funções definidas pelo usuário no MongoDB Atlas, consulte Adicionar funções personalizadas na documentação do MongoDB Atlas.

Os roles concedem aos usuários acesso aos recursos do MongoDB. O MongoDB oferece vários rols integrados que os administradores podem usar para controlar o acesso a um sistema MongoDB. No entanto, se esses roles não puderem descrever o conjunto de privilégios desejado, você poderá criar novos roles em um determinado banco de dados.

Com exceção das funções criadas no banco de dados admin , uma função só pode incluir privilégios que se aplicam ao seu banco de dados e só pode herdar de outras funções em seu banco de dados.

Um papel criado no banco de dados do admin pode incluir privilégios que se aplicam ao banco de dados do admin, outros bancos de dados ou ao recurso cluster e pode herdar de papéis em outros bancos de dados, como também, o banco de dados do admin.

Para criar um novo papel, utilize o método db.createRole() , especificando os privilégios na array privileges e os papéis herdados na array roles .

O MongoDB usa a combinação do nome do banco de dados e do nome da função para definir uma função de forma exclusiva. Cada função tem como escopo o banco de dados no qual você cria a função, mas o MongoDB armazena todas as informações da função na collection admin.system.roles no banco de dados admin.

Para criar um role em um banco de dados, você deve ter:

Roles integrados userAdmin e userAdminAnyDatabase fornecem ações createRole e grantRole em seus respectivos recursos.

Para criar um role com authenticationRestrictions especificado, você deve ter a ação setAuthenticationRestriction no recurso do banco de dados em que o role é criado.

Para adicionar roles personalizados definidos pelo usuário com mongosh, consulte os seguintes exemplos:

O exemplo a seguir cria uma função denominada manageOpRole que fornece somente os privilégios para executar db.currentOp() e db.killOp(). [1]

Observação

Os usuários não precisam de nenhum privilégio específico para visualizar ou matar suas próprias operações em instâncias do mongod . Consulte db.currentOp() e db.killOp() para obter detalhes.

1

Conecte ao mongod ou mongos com os privilégios especificados na seção Pré -requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

O myUserAdmin tem privilégios para criar funções no admin e em outros bancos de dados.

2

manageOpRole tem privilégios que atuam em vários bancos de dados , bem como no recurso de cluster. Como tal, você deve criar o papel no banco de dados do admin .

use admin
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)

A nova função concede permissões para matar quaisquer operações.

Aviso

Encerre as operações em execução com extrema cautela. Utilize somente o método db.killOp() ou comando killOp para encerrar operações iniciadas por clientes e não encerre operações internas de reconhecimento de data center.

[1] A função incorporada clusterMonitor também fornece o privilégio de executar db.currentOp() junto com outros privilégios, e a função integrada hostManager fornece o privilégio de executar db.killOp() junto com outros privilégios.

O exemplo seguinte cria um papel denominado mongostatRole que fornece somente os privilégios para executar mongostat. [2]

1

Conecte ao mongod ou mongos com os privilégios especificados na seção Pré -requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

O myUserAdmin tem privilégios para criar funções no admin e em outros bancos de dados.

2

mongostatRole tem privilégios que agem no recurso do cluster. Como tal, você deve criar o papel no banco de dados do admin .

use admin
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
[2] A função integrada clusterMonitor também fornece o privilégio de executar mongostat junto com outros privilégios.

O exemplo a seguir cria um role chamado dropSystemViewsAnyDatabase que fornece o privilégio para descartar a collection system.views em qualquer reconhecimento de data center.

1

Conecte ao mongod ou mongos com os privilégios especificados na seção Pré -requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

O myUserAdmin tem privilégios para criar funções no admin e em outros bancos de dados.

2

Para a role, especifique um privilégio que consiste em:

use admin
db.createRole(
{
role: "dropSystemViewsAnyDatabase",
privileges: [
{
actions: [ "dropCollection" ],
resource: { db: "", collection: "system.views" }
}
],
roles: []
}
)

Observação

Para modificar as funções de um usuário de banco de dados existente no MongoDB Atlas, consulte Modificar usuários do banco de dados na documentação do MongoDB Atlas.

  • Você deve ter grantRole como uma ação em um banco de dados para conceder uma função neste banco de dados.

  • É necessário ter a revokeRole ação em um banco de dados para revogar um role nesse banco de dados.

  • Para visualizar as informações de um role, você deve ter recebido explicitamente a função ou deve ter a viewRole ação no banco de dados do role.

1

Conecte-se a mongod ou mongos como um usuário com os privilégios especificados na seção de pré-requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Para exibir os roles e privilégios do usuário a ser modificado, utilize os métodos db.getUser() e db.getRole() .

Por exemplo, para visualizar papéis de reportsUser criados em Exemplos Adicionais, questão:

use reporting
db.getUser("reportsUser")

Para exibir o privilégio concedido ao usuário pela função readWrite no reconhecimento de data center "accounts", emita:

use accounts
db.getRole( "readWrite", { showPrivileges: true } )
3

Se o usuário precisar de privilégios adicionais, conceda ao usuário a função, ou funções, com o conjunto necessário de privilégios. Se tal função não existir, crie uma nova função com o conjunto apropriado de privilégios.

Para revogar um subconjunto de privilégios fornecidos por uma função existente: revogue a função original e conceda uma função que contenha apenas os privilégios necessários. Talvez seja necessário criar uma nova função se uma função não existir.

4

Revogue uma função com o método db.revokeRolesFromUser() . A seguinte operação de exemplo remove a role readWrite no reconhecimento de data center accounts do reportsUser:

use reporting
db.revokeRolesFromUser(
"reportsUser",
[
{ role: "readWrite", db: "accounts" }
]
)

Conceda uma função usando o método db.grantRolesToUser() . Por exemplo, a operação a seguir concede ao usuário reportsUser a função read no banco de dados accounts :

use reporting
db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)

Para clusters fragmentados, as alterações no usuário são instantâneas no mongos no qual o comando é executado. Entretanto, para outras mongos instâncias no cluster, o cache do usuário pode esperar até 10 minutos para ser atualizado. Consulte userCacheInvalidationIntervalSecs.

Observação

Para modificar a senha de um usuário existente do MongoDB Atlas, consulte Modificar usuários do banco de dados na documentação do MongoDB Atlas.

Para modificar a senha de outro usuário em um banco de dados, você deve ter a changePassword ação neste banco de dados.

1

Conecte-se ao mongod ou mongos com os privilégios especificados na seção Pré-requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Passe o nome de usuário do usuário e a nova senha para o método db.changeUserPassword().

A seguinte operação altera a senha do usuário reporting para SOh3TbYhxuLiW8ypJPxmt1oOfL:

db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

Dica

Veja também:

Observação

Para visualizar as funções de um usuário no MongoDB Atlas, consulte Exibir Usuários e Certificados do Banco de Dados na documentação do MongoDB Atlas.

Para visualizar as informações de outro usuário, você deve ter a viewUser ação no banco de dados do outro usuário.

Os usuários podem ver suas próprias informações.

1

Conecte-se a mongod ou mongos como um usuário com os privilégios especificados na seção de pré-requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Use o comando usersInfo ou o método db.getUser() para exibir informações do usuário.

Por exemplo, para visualizar papéis de reportsUser criados em Exemplos Adicionais, questão:

use reporting
db.getUser("reportsUser")

No documento retornado, o campo roles exibe todas as funções para reportsUser:

...
"roles" : [
{ "role" : "readWrite", "db" : "accounts" },
{ "role" : "read", "db" : "reporting" },
{ "role" : "read", "db" : "products" },
{ "role" : "read", "db" : "sales" }
]

Observação

Para visualizar os privilégios de uma função no MongoDB Atlas, consulte Visualizar funções personalizadas na documentação do MongoDB Atlas.

Para visualizar as informações de um role, você deve ter recebido explicitamente a função ou deve ter a viewRole ação no banco de dados do role.

1

Conecte-se a mongod ou mongos como um usuário com os privilégios especificados na seção de pré-requisitos.

O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Para uma determinada role, utilize o método db.getRole() ou o comando rolesInfo , com a opção showPrivileges :

Por exemplo, para visualizar os privilégios concedidos pela função read no banco de dados products, use a seguinte operação, execute:

use products
db.getRole( "read", { showPrivileges: true } )

No documento retornado, as arrays privileges e inheritedPrivileges. O privileges lista os privilégios diretamente especificados pela função e exclui os privilégios herdados de outras funções. O inheritedPrivileges lista todos os privilégios concedidos por esta função, tanto especificados diretamente quanto herdados. Se a função não herdar de outras funções, os dois campos serão os mesmos.

...
"privileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
],
"inheritedPrivileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
]

Voltar

Funções definidas pelo usuário

Próximo

Alterar senha e dados personalizados