createRole
Definição
createRole
Cria um role e especifica seus privilégios. O papel se aplica ao banco de banco de dados no qual você executa o comando. O comando
createRole
retorna um erro de papel duplicado se o papel já existir no banco de banco de dados.Dica
Em
mongosh
, esse comando também pode ser executado por meio do método auxiliardb.createRole()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Este comando não é suportado em M0, M2, M5 e M10+ clusters. Para obter mais informações, 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
Sintaxe
O comando tem a seguinte sintaxe:
{ createRole: "<new role>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ], writeConcern: <write concern document>, comment: <any> }
Campos de comando
O comando createRole
tem os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
| string | O nome do novo role. |
| array | Os privilégios para conceder o role. Um privilégio consiste em um recurso e ações permitidas. Para a sintaxe de um privilégio, consulte a array Você deve incluir o campo |
| array | Uma série de roles a partir dos quais este role herda privilégios. Você deve incluir o campo |
| array | Opcional. 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. Novidade na versão 3.6. |
| documento | Opcional. O nível da referência de escrita para a operação de criação. O documento |
| any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
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 createRole
é 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
Novidade na versão 3.6.
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 |
---|---|---|
| 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. |
| 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
Os privilégios de uma função se aplicam ao banco de dados em que a função é criada. A função pode herdar privilégios de outras funções em seu banco de dados. Uma função criada no banco de dados admin
pode incluir privilégios que se aplicam a todos os bancos de dados ou ao cluster e pode herdar privilégios de funções em outros bancos de dados.
Acesso necessário
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.
Exemplo
O seguinte comando createRole
cria a função myClusterwideAdmin
no banco de dados admin
:
db.adminCommand({ createRole: "myClusterwideAdmin", privileges: [ { resource: { cluster: true }, actions: [ "addShard" ] }, { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }, { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] }, { resource: { db: "", collection: "" }, actions: [ "find" ] } ], roles: [ { role: "read", db: "admin" } ], writeConcern: { w: "majority" , wtimeout: 5000 } })