Gerenciar usuários e funções em implantações autogerenciadas
Nesta página
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.
Pré-requisitos
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
Criação de roles definidas pelo usuário
Observação
Para criar funções definidas pelo usuário no Atlas MongoDB, consulte Adicionar funções personalizadas na documentação do Atlas MongoDB.
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
.
Pré-requisitos
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:
Crie uma função para gerenciar as operações atuais
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.
Conecte-se ao MongoDB com os privilégios apropriados.
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.
Crie uma nova função para gerenciar as operações atuais.
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. |
Crie uma função para executar mongostat
O exemplo a seguir cria uma função chamada mongostatRole
que fornece apenas os privilégios para executar mongostat
. [2]
Conecte-se ao MongoDB com os privilégios apropriados.
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.
Crie uma nova função para gerenciar as operações atuais.
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. |
Crie uma função para distribuir a system.views
coleção em bancos de dados
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.
Conecte-se ao MongoDB com os privilégios apropriados.
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.
Crie uma nova função para descartar a system.views
coleção em qualquer banco de dados.
Para a função, especifique um privilégio que consiste em:
uma array
actions
que contém a açãodropCollection
eum documento de recurso que especifica uma string vazia (
""
) para o banco de dados e a string"system.views"
para a collection. Consulte Especificar coleções em bancos de dados como recurso para obter mais informações.
use admin db.createRole( { role: "dropSystemViewsAnyDatabase", privileges: [ { actions: [ "dropCollection" ], resource: { db: "", collection: "system.views" } } ], roles: [] } )
Modificar acesso a um usuário existente
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 .
Pré-requisitos
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.
Procedimento
Conecte-se ao MongoDB com os privilégios apropriados.
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'
Identifique as funções e os privilégios do usuário.
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 } )
Identifique os privilégios para conceder ou revogar.
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.
Modificar o acesso do usuário.
Revogar uma função
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" } ] )
Conceder uma função
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
.
Como modificar a senha de um usuário existente
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.
Pré-requisitos
Para modificar a senha de outro usuário em um banco de dados, você deve ter a changePassword
ação neste banco de dados.
Procedimento
Conecte-se ao MongoDB com os privilégios apropriados.
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'
Altere a senha.
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")
Exibição das roles de um usuário
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.
Pré-requisitos
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.
Procedimento
Conecte-se ao MongoDB com os privilégios apropriados.
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'
Identifique as funções do usuário.
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" } ]
Como ver os privilégios de um role
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.
Pré-requisitos
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.
Procedimento
Conecte-se ao MongoDB com os privilégios apropriados.
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'
Identifique os privilégios concedidos por uma função.
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" ] } ]