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

Gerenciar usuários e funções em implantações autogerenciadas

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 funções e usuários no modelo de autorização do MongoDB para implantações autogerenciadas. Para criar um novo usuário, consulte Criar um usuário em implantações autogerenciadas.

Se você habilitou o controle de acesso para sua implantação, deverá se autenticar como um usuário com os privilégios necessários especificados em cada seção. Para realizar as operações listadas neste tutorial, os usuários administradores precisam ter 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 implantações autogerenciadas

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:

  • a createRole ação nesse recurso de banco de dados.

  • A ação grantRole nesse banco de dados para especificar privilégios para o novo role, bem como para especificar roles dos quais herdar.

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 chamada manageOpRole que fornece apenas 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 encerrar suas próprias operações em instâncias mongod. Veja db.currentOp() e db.killOp() para detalhes.

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 implantaçõ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. Dessa forma, você deve criar a função no banco de dados 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. Use apenas o método db.killOp() ou o comando killOp para encerrar operações iniciadas por clientes e não encerre operações internas de banco de dados.

[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 a seguir cria uma função chamada mongostatRole que fornece apenas os privilégios para executar mongostat. [2]

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 implantaçõ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 atuam no recurso do cluster. Dessa forma, você deve criar a função no banco de dados 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 para executar o mongostat juntamente com outros privilégios.

O exemplo a seguir cria uma função chamada dropSystemViewsAnyDatabase que fornece os privilégios para descartar a coleção system.views em qualquer 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 implantaçõ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 função, 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 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 implantações autogerenciadas.

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

Para exibir as funções e privilégios do usuário a serem modificados, use os métodos db.getUser() e db.getRole().

Por exemplo, para visualizar funções para reportsUser criadas em Exemplos Adicionais, emita:

use reporting
db.getUser("reportsUser")

Para exibir os privilégios concedidos ao usuário pela função readWrite no banco de banco de dados "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 operação de exemplo a seguir remove a função readWrite no banco de dados 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 de 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 implantaçõ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 muda a senha do usuário reporting para SOh3TbYhxuLiW8ypJPxmt1oOfL:

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

Dica

Veja também:

Observação

Para exibir 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 implantaçõ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 funções para reportsUser criadas em Exemplos Adicionais, emita:

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 ver os privilégios de uma função no MongoDB Atlas, consulte Exibir 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 implantações autogerenciadas.

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

Para uma determinada função, use 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