mongoDB配置用户名和密码

    jwolf 
2475  0  0   2016-4-15 6:39


1.mongoDB 支持按角色权限访问控制(Role-Based Access Control )


2.Localhost Exception(妹子不要怕,不是抛出异常): 

mongodb admin db.system.users中没有用户的时候,即使开启了访问控制(--auth加此参数启动)也能创建第一个管理用户,在3.0之前的版本,创建的这个用户也能访问其他的数据库实例,在3.0之后的版本这块修改了,创建的这个用户只能有增加其他用户的权限。简单来说就是管理员也不能越权管理其他实例的数据库表。

原文信息:

With access control enabled, ensure you have a user with userAdmin (page 111) or userAdminAnyDatabase (page 115) role in the admin database. This tutorial assumes a standalone environment. The Enable Internal Authentication (page 39) tutorial has steps specific to enabling access control on replica sets and sharded clusters. You can create users before enabling access control or you can create users after enabling access control. If you enable access control before creating any user, MongoDB provides a localhost exception (page 10) which allows you to create a user administrator in the admin database. Once created, authenticate as the user administrator to create additional users as needed.

 

3. 下面配置用户名密码例子,localhost exception大家可以自行尝试:

首先不启动访问控制启动mongod服务

mongod --port 27017 --dbpath /data/db1

连接到这个已经启动的实例

mongo --port 27017

创建管理员用户

use admin
 db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )

重新启动mongod服务,这次带上访问控制—auth

mongod --auth --port 27017 --dbpath /data/db1

用之前创建的管理员用户账户密码通过验证登录mongo

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

你也可以这样:

use admin
db.auth("myUserAdmin", "abc123" )

现在就可以增进根据我们的业务增进新的用户及配置其访问权限:

use myDatabase
db.createUser( { user: "user", pwd: "abc123", roles: [ { role: "readWrite", db: " myDatabase " } ] } )

现在创建的这个用户user对我们的”myDatabase”有读写权限了。

 

4. node 访问连接

这块网上相关资料很多,不再详述,说几个比较坑的地方:

由于使用了访问控制, 访问数据库的时候需要认证:

mongodb.open(function (err, db) {
    db.authenticate(settings.username,settings.password ,function(){
        callback(err, db);
    });
})

如果使用express保存sessions ,在配置的地方也得补上认证信息:

app.use(session({
   resave: settings.resave,
   saveUninitialized:settings.saveUninitialized,
   secret: settings.cookieSecret,
   key: settings.db,//cookie name
   cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
   store: new MongoStore({
     url:'mongodb://'+settings.username+":"+settings.password+"@"+settings.host+'/'+settings.db
   })
 }));



另外,之前没有启用访问限制的时候,使用 robomongo可视化工具可舒服了,但是3.0之后,monogdb默认的认证协议改了,旧版(大家用的XXX版)一般都会验证不上了,据说新版的能用,没有XXX版的。

参考文献:

MongoDB Security Guide Release 3.2.5

官方文档