启用访问控制 您所在的位置:网站首页 mongodb权限设置 启用访问控制

启用访问控制

2024-04-01 04:42| 来源: 网络整理| 查看: 265

在本页面

总览 用户管理员 程序 其他注意事项 概述¶

在MongoDB部署上启用访问控制会强制执行身份验证,要求用户标识自己。访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。

以下教程在独立mongod实例上启用访问控制, 并使用默认的身份验证机制。有关所有受支持的认证机制,请参阅 认证机制。

用户管理员¶

启用访问控制后,请确保您在数据库中具有用户 userAdmin或userAdminAnyDatabase角色 admin。该用户可以管理用户和角色,例如:创建用户,向用户授予或撤消角色,以及创建或修改海关角色。

程序¶

以下过程首先将用户管理员添加到在没有访问控制的情况下运行的MongoDB实例,然后启用访问控制。

注意

示例MongoDB实例使用和数据目录directory。该示例假定存在数据目录 。根据需要指定其他数据目录。port 27017/var/lib/mongodb/var/lib/mongodb

1个 在没有访问控制的情况下启动MongoDB。¶

启动mongod没有访问控制的独立实例。

例如,打开终端并发出以下命令:

复制 mongod --port 27017 --dbpath /var/lib/mongodb 2 连接到实例。¶

例如,打开一个新终端并将mongo 外壳连接到实例:

复制 mongo --port 27017

根据需要指定其他命令行选项以将mongoShell 连接 到您的部署,例如--host。

3 创建用户管理员。¶

从mongo外壳中,userAdminAnyDatabase在admin数据库中添加具有该角色的用户 。根据需要为此用户添加其他角色。例如,以下内容使用角色和 角色myUserAdmin在admin数据库中 创建用户。userAdminAnyDatabasereadWriteAnyDatabase

小费

从mongoShell的4.2版本开始,您可以将该passwordPrompt()方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongoShell中一样直接指定密码 。

复制 use admin db.createUser( { user: "myUserAdmin", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )

注意

在其中创建用户的数据库(在此示例中 admin)是用户的身份验证数据库。尽管用户将对此数据库进行身份验证,但是该用户可以在其他数据库中扮演角色;也就是说,用户的身份验证数据库不限制用户的权限。

4 使用访问控制重新启动MongoDB实例。¶

关闭mongod实例。例如,从mongo外壳程序中,发出以下命令:

复制 db.adminCommand( { shutdown: 1 } )

退出mongo外壳。

在mongod启用访问控制的情况下启动。

如果mongod从命令行启动,请添加--auth命令行选项:

复制 mongod --auth --port 27017 --dbpath /var/lib/mongodb

如果您开始mongod使用 配置文件,请添加 security.authorization配置文件设置:

复制 security: authorization: enabled

现在,连接到该实例的客户端必须将自己认证为MongoDB用户。客户只能执行由其分配的角色确定的操作。

5 以用户管理员身份连接并进行身份验证。¶

使用mongo外壳,您可以:

通过传递用户凭据连接到身份验证,或 首先连接而不进行身份验证,然后发出db.auth()进行身份验证的 方法。 连接期间进行身份验证 连接后进行身份验证

启动mongo与外壳,以及 命令行选项:-u -p--authenticationDatabase

复制 mongo --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p

出现提示时输入密码。

将mongo外壳连接到 mongod:

复制 mongo --port 27017

在mongo外壳程序中,切换到身份验证数据库(在本例中为admin),然后使用 方法进行身份验证:db.auth(, )

小费

从mongoShell的4.2版本开始,您可以将该passwordPrompt()方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongoShell中一样直接指定密码 。

复制 use admin db.auth("myUserAdmin", passwordPrompt()) // or cleartext password

出现提示时输入密码。

6 根据部署需要创建其他用户。¶

通过用户管理员身份验证后,可 db.createUser()用于创建其他用户。您可以将任何内置角色或 用户定义的角色分配给用户。

下面的操作将用户添加myTester到test 谁拥有数据库readWrite中的角色test 数据库以及read在角色reporting 数据库。

小费

从mongoShell的4.2版本开始,您可以将该passwordPrompt()方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongoShell中一样直接指定密码 。

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

注意

在其中创建用户的数据库(在此示例中 test)是该用户的身份验证数据库。尽管用户将对此数据库进行身份验证,但是该用户可以在其他数据库中扮演角色;也就是说,用户的身份验证数据库不限制用户的权限。

创建其他用户后,断开mongo外壳程序连接 。

7 连接到实例并以身份验证myTester。¶

以断开mongo外壳 myUserAdmin连接后,以重新连接myTester。您可以:

通过传递用户凭据连接到身份验证,或 首先连接而不进行身份验证,然后发出db.auth()进行身份验证的 方法。 连接期间进行身份验证 连接后进行身份验证

启动mongo与外壳,以及 命令行选项:-u -p--authenticationDatabase

复制 mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p

出现提示时输入用户密码。

将mongo外壳连接到 mongod:

复制 mongo --port 27017

在mongo外壳程序中,切换到身份验证数据库(在本例中为test),然后使用 方法进行身份验证:db.auth(, )

小费

从mongoShell的4.2版本开始,您可以将该passwordPrompt()方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongoShell中一样直接指定密码 。

复制 use test db.auth("myTester", passwordPrompt()) // or cleartext password

出现提示时输入用户密码。

8 插入文档为myTester。¶

与一样myTester,您有权在test数据库中执行读取和写入操作(以及在数据库中执行读取操作reporting)。身份验证为后 myTester,将文档插入test 数据库的集合中。例如,您可以在test数据库中执行以下插入操作:

复制 db.foo.insert( { x: 1, y: 1 } )

也可以看看

管理用户和角色。

其他注意事项¶ 副本集和分片群集¶

启用访问控制后,副本集和分片群集要求成员之间进行内部身份验证。有关更多详细信息,请参阅内部/成员身份验证。

Localhost异常¶

您可以在启用访问控制之前或之后创建用户。如果在创建任何用户之前启用访问控制,则MongoDB将提供 localhost异常,该异常允许您在admin数据库中创建用户管理员。创建后,您必须通过用户管理员身份验证才能根据需要创建其他用户。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有