MongoDB用户管理

您所在的位置:网站首页 要使用恢复选项请以本地用户的身份登录 MongoDB用户管理

MongoDB用户管理

2023-06-26 12:36| 来源: 网络整理| 查看: 265

一、概述

要在MongoDB中验证客户端,必须向MongoDB添加相应的用户。

1、用户管理

可以在mongosh使用db.createUser()方法添加用户。您创建的第一个用户必须具有创建其他用户的权限。userAdmin或userAdminAnyDatabase角色都授予创建其他用户的权限。

您可以通过在创建用户时将角色分配给用户来授予用户权限。您还可以通过更新现有用户来授予或撤销角色,以及更新密码。

用户由用户名和相关联的身份验证数据库唯一标识。MongoDB在MongoDB中创建时,会将用户与唯一的userId关联起来。

LDAP托管用户 在LDAP服务器上创建的LDAP管理用户在system.users集合中没有关联的文档,因此没有与其关联的userId字段。

2、身份验证数据库

添加用户时,将在特定数据库中创建该用户。您在其中创建用户的数据库是该用户的身份验证数据库。 但是,用户的权限并不局限于他们的身份验证数据库。因此,用户可以拥有跨不同数据库的权限。有关角色的详细信息,请参见基于角色的访问控制。 用户的名称和身份验证数据库充当该用户的唯一标识符。MongoDB在MongoDB中创建时,会将用户与唯一的userId关联起来。但是,在LDAP服务器上创建的LDAP管理用户在system.users集合中没有关联的文档,因此没有关联的userId字段。 如果两个用户具有相同的名称,但在不同的数据库中创建,则它们是两个独立的用户。如果要让一个用户对多个数据库具有权限,请为每个适用的数据库创建一个具有角色的用户。

3、集中式用户数据

对于在MongoDB中创建的用户,MongoDB将所有用户信息(包括名称、密码和用户的身份验证数据库)存储在管理数据库的system.users集合中。 不要直接修改此集合。要管理用户,请使用指定的用户管理命令。

4、分片群集用户

要为分片集群创建用户,请连接到mongos实例并添加用户。要作为在mongos实例上创建的用户进行身份验证,必须通过mongos示例进行身份验证。 在分片集群中,MongoDB将用户配置数据存储在配置服务器的管理数据库中。

5、共享本地用户

一些维护操作,如cleanupOrphaned、compact或rs.reconfig(),需要直接连接到分片集群中的特定分片。要执行这些操作,必须直接连接到shard并作为shard本地管理用户进行身份验证。 要创建shard本地管理用户,请直接连接到shard的主用户并创建该用户。有关如何创建碎片本地用户管理员的说明,请参阅Deploy Sharded Cluster with Keyfile Authentication教程。 MongoDB将shard本地用户存储在shard本身的管理数据库中。这些shard本地用户独立于通过mongos添加到sharded集群的用户。Shard本地用户是Shard的本地用户,mongos无法访问。 与碎片的直接连接应仅用于特定于碎片的维护和配置,或用于目标分析工作负载。通常,客户端应该通过mongos连接到分片集群。

二、创建用户

启用访问控制后,用户需要识别自己的身份。您必须授予用户一个或多个角色。角色授予用户在MongoDB资源上执行某些操作的权限。 MongoDB系统的每个应用程序和用户都应该映射到一个不同的用户。这种访问隔离原则有助于访问撤销和正在进行的用户维护。为了确保系统的权限最小,只向用户授予所需的最小权限集。

先决条件 为了能够创建用户,您需要:

启用访问控制创建用户管理员

对于常规用户创建,您必须拥有以下权限:

要在数据库中创建新用户,必须对该数据库资源执行createUser操作。要向用户授予角色,必须对角色的数据库执行grantRole操作。

userAdmin和userAdminAnyDatabase内置角色在各自的资源上提供createUser和grantRole操作。

1、步骤 连接和身份验证

使用mongosh,连接到您的主mongod,或者在分片集群中,连接到mongos并使用 所需权限:

使用-u<username>、-p和--authenticationDatabase<database>命令行选项:

mongosh --port 27017 --authenticationDatabase \ "admin" -u "myUserAdmin" -p

提示时输入密码。

为您的部署创建其他用户 

作为用户管理员进行身份验证后,使用db.createUser()方法创建其他用户。您可以为用户分配任何内置角色或用户定义的角色。 以下操作将用户myTester添加到测试数据库中,该用户在测试数据库中具有readWrite角色,在报告数据库中具有读取角色。

use test db.createUser( { user: "myTester", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )

passwordPrompt()方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议使用passwordPrompt()方法,以避免密码在屏幕上可见,并可能将密码泄露到shell历史记录中。 

创建用户的数据库(在本例中为测试)是该用户的身份验证数据库。尽管用户对此数据库进行身份验证,但用户可以在其他数据库中具有角色。用户的身份验证数据库不限制用户的权限。 创建完附加用户后,退出mongosh。

连接到实例并作为myTester进行身份验证

 不可能在同一个mongosh会话中的用户之间切换。作为不同用户进行身份验证意味着会话具有两个已验证用户的权限。在用户退出和重新启动mongosh之间切换。

 以myUserAdmin身份退出mongosh后,以myTester身份重新连接:

使用-u<username>、-p和--authenticationDatabase<database>命令行选项:

mongosh --port 27017 -u "myTester" \ --authenticationDatabase "test" -p

提示时输入用户的密码。

以myTester身份插入文档

作为用户myTester,您有权在测试数据库中执行读和写操作(以及在报告数据库中执行读取操作)。通过myTester身份验证后,将文档插入测试数据库中的集合中。例如,您可以在测试数据库中执行以下插入操作: 

db.foo.insertOne( { x: 1, y: 1 } ) 2、扩展示例 用户名/密码验证

以下操作在报表数据库中创建具有指定名称、密码和角色的用户。 

use reporting db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } )

kerberos身份验证

 使用外部身份验证机制(如Kerberos)向MongoDB进行身份验证的用户必须在$external数据库中创建,该数据库允许mongos或mongod查阅外部来源进行身份验证。 要对$external身份验证用户(Kerberos、LDAP或x.509用户)使用客户端会话和因果一致性保证,用户名不能大于10k字节。 对于Kerberos身份验证,必须添加Kerberos主体作为用户名。您不需要指定密码。 以下操作添加Kerberos主体[email protected]以只读方式访问记录数据库:

use $external db.createUser( { user: "[email protected]", roles: [ { role: "read", db: "records" } ] } ) 三、用户身份验证

要作为用户进行身份验证,必须提供用户名、密码和与该用户关联的身份验证数据库。

使用mongosh,您可以:

使用-u<username>、-p和--authenticationDatabase<database>命令行选项启动mongosh:

mongosh --port 27017 --authenticationDatabase \ "admin" -u "myUserAdmin" -p

提示时输入密码。

四、查找用户

要列出所有用户,请使用mongosh查询system.users集合:

use admin db.system.users.find()

要列出通过mongos创建的分片集群的所有用户,请连接到mongos并运行前面的命令。MongoDB将通过mongos创建的用户存储在配置服务器的管理数据库中。 要列出所有shard本地用户,请直接连接到相应的shard并运行前面的命令。MongoDB将shard本地用户存储在shard本身的管理数据库中。这些shard本地用户独立于通过mongos添加到sharded集群的用户。Shard本地用户是Shard的本地用户,mongos无法访问。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3