启用访问控制 | 您所在的位置:网站首页 › mongodb权限设置 › 启用访问控制 |
在本页面 总览 用户管理员 程序 其他注意事项 概述¶在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 实验室设备网 版权所有 |