db.updateRole()
Definição
db.updateRole( rolename, update, writeConcern )
Atualiza umrole definido pelo usuário . O método
db.updateRole()
deve ser executado no banco de banco de dados da função.Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação para comandos de banco de dados nem drivers específicos de linguagem, como Node.js.Para o comando do banco de dados, consulte o comando
updateRole
.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Uma atualização em um campo substitui completamente os valores do campo anterior. Para conceder ou remover roles ou privilégios sem substituir todos os valores, utilize um ou mais dos seguintes métodos:
Aviso
Uma atualização na array
privileges
ouroles
substitui completamente os valores da matriz anterior.O método
db.updateRole()
utiliza a seguinte sintaxe:db.updateRole( "<rolename>", { privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>", | "<CIDR range>", ...] }, ... ] }, { <writeConcern> } ) O método
db.updateRole()
aceita os seguintes argumentos:ParâmetroTipoDescriçãorolename
stringO nome da role definida pelo usuário a ser atualizada.update
documentoUm documento contendo os dados de substituição para a role. Esses dados substituem por completo os dados correspondentes para a role.writeConcern
documentoOpcional. O nível da write concern para a operação. Consulte Especificação de write concern.
O documento
update
especifica os campos a serem atualizados e os novos valores. Cada campo no documentoupdate
é opcional, mas o documento deve incluir pelo menos um campo. O documentoupdate
tem os seguintes campos:CampoTipoDescriçãoprivileges
arrayOpcional. Obrigatório se você não especificar o arrayroles
. Os privilégios para conceder a role. Uma atualização no arrayprivileges
substitui os valores do array anterior. Para saber a sintaxe para especificar um privilégio, consulte o arrayprivileges
.roles
arrayOpcional. Obrigatório se você não especificar o arrayprivileges
. As roles das quais esta herda privilégios. Uma atualização no arrayroles
substitui os valores do array anterior.authenticationRestrictions
arrayOpcional.
As restrições de autenticação que o servidor impõe ao role. Especifica uma lista de endereços IP e os usuários do CIDR têm permissão para se conectar e/ou a partir da qual podem se conectar.
O método
db.updateRole()
encapsula o comandoupdateRole
.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
Importante
Este comando não é suportado em clusters MongoDB Atlas . Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Funções
No campo roles
, é possível especificar roles incorporadas e roles definidas pelo usuário.
Para especificar uma função que existe no mesmo banco de dados onde o db.updateRole()
é executado, você pode especificar a função com o próprio nome dela:
"readWrite"
Ou você pode especificar a role com um documento, como feito a seguir:
{ role: "<role>", db: "<database>" }
Para especificar uma role existente em outro banco de dados, especifique-a com um documento.
Restrições de autenticação
O documento authenticationRestrictions
pode conter apenas os seguintes campos. O servidor emitirá um erro se o documento authenticationRestrictions
contiver um campo não reconhecido:
Nome do campo | Valor | Descrição |
---|---|---|
clientSource | Array de endereços IP e/ou faixas CIDR | Se presente, ao autenticar um usuário, o servidor verifica se o endereço IP do cliente está na lista fornecida ou se pertence a uma faixa CIDR na lista. Se o endereço IP do cliente não estiver presente, o servidor não autenticará o usuário. |
serverAddress | Array de endereços IP e/ou faixas CIDR | Uma lista de endereços IP ou faixas CIDR às quais o cliente pode se conectar. Se estiver presente, o servidor verificará se a conexão do cliente foi aceita por meio de um endereço IP na lista fornecida. Se a conexão foi aceita por meio de um endereço IP não reconhecido, o servidor não autenticará o usuário. |
Importante
Se um usuário herdar múltiplas roles com restrições de autenticação incompatíveis, esse usuário se tornará inutilizável.
Por exemplo, se um usuário herdar uma função na qual o campo clientSource
é ["198.51.100.0"]
e outra função na qual o campo clientSource
é ["203.0.113.0"]
, o servidor não poderá autenticar o usuário.
Para obter mais informações sobre autenticação no MongoDB, consulte Autenticação.
Comportamento
réplicaSet
Se executado em um conjunto de réplicas, db.updateRole()
é executado usando a preocupação de gravação "majority"
por padrão.
Escopo
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
.
Acesso necessário
Você deve ter a ação revokeRole
em todos os bancos de dados para atualizar uma role.
Você deve ter a ação grantRole
no banco de dados de cada role no array roles
para atualizar o array.
Você deve ter a ação grantRole
no banco de dados de cada privilégio no array privileges
para atualizar o array. Se o recurso de um privilégio abrange bancos de dados, você deverá ter grantRole
no banco de dados admin
. Um privilégio abrange bancos de dados se o privilégio for qualquer um dos seguintes:
uma collection em todos os bancos de dados
todas as collections e todos os bancos de dados
o recurso
cluster
Você deve ter a ação setAuthenticationRestriction
no banco de dados da role de destino para atualizar o documento authenticationRestrictions
de uma role.
Exemplo
O método db.updateRole()
a seguir substitui privileges
e roles
pela função inventoryControl
que existe no banco de dados products
. O método é executado no banco de dados que contém inventoryControl
:
use products db.updateRole( "inventoryControl", { privileges: [ { resource: { db:"products", collection:"clothing" }, actions: [ "update", "createCollection", "createIndex"] } ], roles: [ { role: "read", db: "products" } ] }, { w:"majority" } )
Para visualizar os privilégios de uma role, utilize o comando rolesInfo
.