mongodb版本为3.2.10(目前最新),演示的是linux下的mongodb授权认证
service mongod start
默认的启动mongod是不开启授权登录的。我的MongoDB是使用的yum安装的。详见《在CentOS 6.x 64bit上安装MongoDB 3.2社区版》。所以,mongod是安装在:/usr/bin/mongod,配置文件的路径:/etc/mongod.conf。
show dbs;
看到只有一个local数据库,admin是不存在的(这是3.0以上版本改变了的),我们需要自己给他创建个admin数据库。
添加授权用户
use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]});
启动授权登录
vi /etc/mongo.conf
在配置文件中增加
security:
authorization: "enabled"
当你运行 show dbs;的时候会出现下面的提示:
~ mongo
MongoDB shell version: 3.2.10
connecting to: 127.0.0.1/test
> show dbs;
2016-11-15T09:26:16.883+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
这说明已经启用授权管理了。
运行
db.auth('mongoadmin','mongoadmin');
就可以执行相关的操作命令了。
创建一个普通用户
使用mongoadmin授权操作视乎权限有点儿大。咱们可以为每个db授权一个用户来进行操作。
use myTest
db.createUser(
{
user: "test",
pwd: "123456",
roles: [
{ role: "readWrite", db: "myTest" }
]
}
)
这样就可以为myTest添加了test的授权用户,test用户可以对myTest进行读写操作,由于它不是一个操作用户。所以,不能对admin数据库进行操作。