概述
在MongoDB实例上开启访问权限控制,意味着强制要求用户输入账号密码进行授权认证。在开启了访问权限控制的MongoDB实例上,用户能进行的操作取决于登陆账号的角色(roles)。
MongoDB支持多种授权认证机制。下面将介绍如何使用MongoDB默认的机制开启访问权限控制。
用户管理员
在开启访问权限控制时,需要确保admin库中有一个被分配了userAdmin或者userAdminAnyDatabase角色的用户账号。这个账号可以管理用户和角色,比如:创建用户,获取角色权限,创建或修改自定义角色等。
在访问权限控制开启之前或之后,都可以执行创建用户的操作。如果你在开启访问权限控制之前没有创建任何用户,MongoDB提供一个特有机制,让你能够在admin库中创建管理员账号。一旦管理员账号创建完毕,其他账号则必须使用该管理员账号进行创建。
步骤
在下面的流程中,首先在尚未开启访问权限控制的MongoDB实例中添加一个用户管理员账号,然后再开启访问权限控制。
1.启动MongoDB服务(禁用访问权限控制)
mongod --port 27017--dbpath /data/db1
2.连接至MongoDB实例
mongo --port 27017
3.添加管理员账号
use admin
db.createUser({user: "myUserAdmin", pwd: "abc123", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
4.重启MongoDB实例,并启用访问权限控制
mongod --auth --port 27017--dbpath /data/db1
5.连接至MongoDB实例
mongo --port 27017
切换至admin库,并登陆
use admin
db.auth("myUserAdmin","abc123")
6.添加普通用户账号
use test
db.createUser({user: "myTester", pwd: "xyz123", roles: [{role: "readWrite", db: "test"}, {role: "read", db: "reporting"}]})
7.使用普通用户账号登陆
mongo --port 27017
use test
db.auth("myTester","xyz123")
向数据集中添加纪录
db.foo.insert({x:1, y:1})