📜  在 MongoDB 中创建用户并添加角色

📅  最后修改于: 2022-05-13 01:56:58.193000             🧑  作者: Mango

在 MongoDB 中创建用户并添加角色

在 MongoDB 中,我们可以为数据库创建新用户。每个 MongoDB 用户只能访问其角色所需的数据。 MongoDB 中的角色授予对给定资源执行某些操作集的权限。在 MonogDB 中,用户是使用 createUser() 方法创建的。此方法为数据库创建一个新用户,如果指定的用户已存在于数据库中,则此方法将返回错误。

句法:

参数:

1. 用户:它包含有关要创建的用户的身份验证和访问信息。它是一个文件。



  • 用户:用户名
  • pwd:用户密码。如果您在 $external 数据库上使用此方法创建凭据存储在外部的用户,则不需要此字段。该字段的值可以是字符串类型或 passwordPrompt()。
  • customData:用户关联信息。它是一个可选字段。
  • 角色:用户的访问级别或权限。您还可以通过传递空数组 [] 来创建没有角色的用户。在此字段中,您可以使用内置角色,也可以使用db.createRole ( role , writeConcern) 方法创建自己的角色。要指定角色,您可以使用以下任何语法:

只需指定角色名称:

或者您可以指定一个包含 role 和 db 字段的文档。通常在不同数据库中指定角色时使用。

  • authenticationRestrictions:用户的认证权限。它是一个可选字段。
  • 机制:用于指定SCRM机制或创建SCRM用户凭证的机制它是一个可选字段。
  • passwordDigestor:用于检查服务器或客户端是否消化了密码。 它是一个可选字段。

2. writeConcern:可选参数。它管理创建操作的写入关注级别。它采用与 getLastError 命令采用相同的字段。

笔记:

  • 在 MongoDB 中,数据库中第一个创建的用户必须是 admin 用户。 admin 用户拥有维护所有用户的权限。此外,不允许在本地数据库中创建用户。
  • db.createUser() 在没有任何加密的情况下将密码和所有其他数据发送到 MongoDB 实例。要在传输过程中加密密码,请使用 TLS/SSL 进行加密。

如何创建管理用户?

在 MongoDB 中,您可以使用 createUser() 方法创建管理用户。在此方法中,我们可以创建管理用户的名称、密码和角色。让我们借助一个例子来讨论这个概念:

例子:



在这个例子中,我们将在 admin 数据库中创建一个管理用户,并授予用户对 config 数据库的读写访问权限,允许用户更改分片集群的某些设置。

db.createUser(
{ 
 user: "hello_admin",
 pwd:  "hello123",
 roles:
 [
 { role:"readWrite",db:"config"},
 "clusterAdmin"
 ] } );

所以首先要创建一个管理用户,我们使用 admin 数据库。在这个数据库中,我们使用 createUser() 方法创建一个管理员用户。在该方法中,我们设置用户名为“hello_admin”,密码为“hello123”,admin用户的角色为readWrite、config、clusterAdmin。

如何创建没有任何角色的普通用户?

在 MongoDB 中,我们可以通过在 createUser() 方法的角色字段中指定一个空数组 [] 来创建一个没有任何角色的用户。

句法:

让我们借助一个例子来讨论这个概念:

例子:

在以下示例中,我们将创建一个没有角色的用户。

db.createUser({user:"geeks", pwd: "computer", roles:[]});

在这里,我们正在处理“ example ”数据库并创建了一个没有角色的名为“geeks”的用户。



如何创建具有某些指定角色的用户?

在 MongoDB 中,我们可以使用 createUser() 方法创建具有某些指定角色的用户。在此方法中,我们可以指定用户创建后将执行的角色。让我们借助一个例子来讨论这个概念:

例子:

在这个例子中,我们将创建一个具有某些指定角色的用户。

db.createUser(
...{
...user: "new_one_role",
...pwd: with_roles",
...roles:["readWrite", "dbAdmin"]
...}
...);

在这里,我们创建一个名为“new_one_role”、密码为“with_roles”的用户,指定的角色为:

  • readWrite 角色:此角色提供读取角色的所有权限以及修改所有非系统集合上的数据的能力。
  • dbAdmin 角色:此角色使用户能够执行管理任务,例如与架构相关的任务、索引。它不授予用户和角色管理的权限。

如何为单个数据库创建用户?

在 MongoDB 中,我们还可以使用 createUser() 方法为单个数据库创建用户。让我们借助一个例子来讨论这个概念:

例子:

db.createUser(
{
user: "robert",
pwd:  "hellojose",
roles:[{role: "userAdmin" , db:"example"}]})

在这里,我们创建一个用户名是“Robert”,密码是“hellojose”,我们为该用户分配一个角色,在这种情况下需要是一个数据库管理员,所以它被分配给“userAdmin”角色。此角色将允许用户仅对 db 选项中指定的数据库(即“example”)具有管理权限。



如何创建具有身份验证限制的用户?

在 MongoDB 中,身份验证是检查尝试访问数据库的用户/客户端是已知还是未知的过程。如果用户是已知的,那么它允许他们与服务器连接。我们还可以使用 createUser() 方法通过设置 authenticationRestrictions 字段的值来创建具有身份验证限制的用户。该字段提供用户的认证权限,包含以下字段:

  • clientSource:如果此字段的值存在,那么当用户验证服务器时,服务器会通过检查给定列表中的 IP 地址或列表中的 CIDR 范围来验证客户端 IP。如果列表中存在客户端 IP,则服务器对客户端进行身份验证,否则服务器将不会对用户进行身份验证。
  • serverAddress:它是客户端可以连接到的 IP 地址或 CIDR 范围的列表。如果此字段的值出现在列表中,则服务器验证客户端连接,如果连接是通过无法识别的 IP 地址建立的,则服务器不会对用户进行身份验证。

让我们借助一个例子来讨论这个概念:

例子:

在此示例中,我们将创建一个具有身份验证限制的用户:

use admin
db.createUser(
   {
     user: "restrict",
     pwd: passwordPrompt(),      
     roles: [ { role: "readWrite", db: "example" } ],
     authenticationRestrictions: [ {
        clientSource: ["192.168.65.10"],
        serverAddress: ["198.157.56.0"]
     } ]
   }
)

在这里,我们在 admin 数据库中创建了一个名为“restrict”的用户。因此,此用户只能在从 IP 地址192.168.65.10连接到此服务器地址 IP 地址198.157.56.0 时进行身份验证。

如何删除用户?

在 Mongodb 中,我们还可以使用 dropUser() 方法删除用户。当用户被删除时,此方法返回真,否则返回假。

句法:

例子:

在本例中,我们将删除一个名为 Robert 的用户。

db.dropUser("robert")