db.createRole()
Definição
db.createRole(role, writeConcern)
Cria um papel em um banco de dados. Você pode especificar privilégios para o papel listando explicitamente os privilégios ou tendo o papel herdando privilégios de outros papéis ou ambos. O papel se aplica ao banco de dados no qual você executa o método.
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 de banco de dados de dados, consulte o comando
createRole
.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
O método
db.createRole()
aceita os seguintes argumentos:ParâmetroTipoDescriçãorole
documento
Um documento contendo o nome da função e a definição da função.
writeConcern
documento
Opcional. O nível da write concern para a operação. Consulte Especificação de write concern.
O documento
role
tem o seguinte formulário:{ role: "<name>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ] } O documento
role
tem os seguintes campos:CampoTipoDescriçãorole
string
O nome do novo role.
privileges
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
privileges
.Você deve incluir o campo
privileges
. Use uma array vazia para não especificar nenhum privilégio.roles
array
Uma série de roles a partir dos quais este role herda privilégios.
Você deve incluir o campo
roles
. Use uma array vazia para especificar nenhum role para herdar.authenticationRestrictions
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.
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.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.
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
Comportamento
réplicaSet
Se executado em um conjunto de réplicas, db.createRole()
é 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
.
O método db.createRole()
retornará um erro de função duplicada se a função já existir no banco 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 método db.createRole()
a seguir cria a função myClusterwideAdmin
no banco de dados admin
:
use admin db.createRole( { role: "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" } ] }, { w: "majority" , wtimeout: 5000 } )