在MongoDB部署上启用访问控制会强制执行身份验证,要求用户标识自己。访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
启用访问控制后,请确保您在数据库中具有用户
userAdmin
或userAdminAnyDatabase
角色
admin
。该用户可以管理用户和角色,例如:创建用户,向用户授予或撤消角色,以及创建或修改海关角色。
以下过程首先将用户管理员添加到在没有访问控制的情况下运行的MongoDB实例,然后启用访问控制。
注意
示例MongoDB实例使用和数据目录directory。该示例假定存在数据目录
。根据需要指定其他数据目录。port 27017
/var/lib/mongodb
/var/lib/mongodb
从mongo
外壳中,userAdminAnyDatabase
在admin
数据库中添加具有该角色的用户
。根据需要为此用户添加其他角色。例如,以下内容使用角色和
角色myUserAdmin
在admin
数据库中
创建用户。userAdminAnyDatabase
readWriteAnyDatabase
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
注意
在其中创建用户的数据库(在此示例中
admin
)是用户的身份验证数据库。尽管用户将对此数据库进行身份验证,但是该用户可以在其他数据库中扮演角色;也就是说,用户的身份验证数据库不限制用户的权限。
使用mongo
外壳,您可以:
db.auth()
进行身份验证的
方法。启动mongo
与外壳,以及
命令行选项:-u
<username>
-p
--authenticationDatabase <database>
出现提示时输入密码。
在mongo
外壳程序中,切换到身份验证数据库(在本例中为admin
),然后使用
方法进行身份验证:db.auth(<username>, <pwd>)
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
出现提示时输入密码。
通过用户管理员身份验证后,可
db.createUser()
用于创建其他用户。您可以将任何内置角色或
用户定义的角色分配给用户。
下面的操作将用户添加myTester
到test
谁拥有数据库readWrite
中的角色test
数据库以及read
在角色reporting
数据库。
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
注意
在其中创建用户的数据库(在此示例中
test
)是该用户的身份验证数据库。尽管用户将对此数据库进行身份验证,但是该用户可以在其他数据库中扮演角色;也就是说,用户的身份验证数据库不限制用户的权限。
创建其他用户后,断开mongo
外壳程序连接
。
myTester
。¶以断开mongo
外壳
myUserAdmin
连接后,以重新连接myTester
。您可以:
db.auth()
进行身份验证的
方法。启动mongo
与外壳,以及
命令行选项:-u
<username>
-p
--authenticationDatabase <database>
出现提示时输入用户密码。
在mongo
外壳程序中,切换到身份验证数据库(在本例中为test
),然后使用
方法进行身份验证:db.auth(<username>, <pwd>)
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
出现提示时输入用户密码。
myTester
。¶与一样myTester
,您有权在test
数据库中执行读取和写入操作(以及在数据库中执行读取操作reporting
)。身份验证为后
myTester
,将文档插入test
数据库的集合中。例如,您可以在test
数据库中执行以下插入操作:
也可以看看