创建认证用户
取消认证:
如不取消认证则无法创建用户,新安装的 MongoDB 默认没开启认证。
注释掉 /etc/mongod.conf
以下内容:
#security: # authorization: enabled
注意:创建用户完成后再加上参数并取消注释,修改MongoDB配置文件必须重启MongoDB服务。
重启MongoDB
$ systemctl restart mongod
登录mongo数据库:
$ mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 Server has startup warnings: 2017-11-20T14:50:48.633+0800 I STORAGE [initandlisten] 2017-11-20T14:50:48.633+0800 I STORAGE [initandlisten] ** WARNING: Readahead for /apps/mongo is set to 4096KB 2017-11-20T14:50:48.633+0800 I STORAGE [initandlisten] ** We suggest setting it to 256KB (512 sectors) or less 2017-11-20T14:50:48.633+0800 I STORAGE [initandlisten] ** //dochub.mongodb.org/core/readahead 2017-11-20T14:50:48.658+0800 I CONTROL [initandlisten] 2017-11-20T14:50:48.658+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-11-20T14:50:48.658+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-11-20T14:50:48.658+0800 I CONTROL [initandlisten] >
在 admin 库中创建超级用户,超级用户用于管理其他用户的权限:
> use admin db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
以上参数说明:
user:
用户
pwd:
用户密码
roles:
一组角色设置(对象)
role:
角色名
db:
角色所控制的数据库名
MongoDB数据库角色说明:
普通用户角色:read
、readWrite
。
数据库管理员角色:dbAdmin
、dbOwner
、userAdmin
。
集群管理员角色:clusterAdmin
、clusterManager
、clusterMonitor
、hostManager
。
数据库备份与恢复角色:backup
、restore
。
所有数据库角色:readAnyDatabase
、readWriteAnyDatabase
、userAdminAnyDatabase
、dbAdminAnyDatabase
。
超级用户角色:root
,这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner
、userAdmin
、userAdminAnyDatabase
)。
核心角色:__system
。
开启认证并登录 MongoDB 查看数据库:
$ mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 > use admin switched to db admin > show dbs 2017-11-20T15:23:04.399+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13, "codeName" : "Unauthorized" } : _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:769:19 shellHelper@src/mongo/shell/utils.js:659:15 @(shellhelp2):1:1
提示无权限,下面开始认证数据库:
> db.auth("admin","admin") 1
说明:1表示认证通过,0表示认证无法通过。
再次获取数据库列表成功:
> show dbs admin 0.078GB local 0.078GB
创建MongoDB用户及数据库
创建普通用户:
> use renwolecomdb db.createUser( { user: "renwolecom", pwd: "renwolecom", roles: [ { role: "readWrite", db: "renwolecomdb" } ] } )
查看系统所有用户授权情况:
> use admin > db.system.users.find()
查看当前库用户角色情况(包含当前数据库下所有用户):
> use renwolecomdb > show users
创建数据库
use
命令只是向 MongoDB
注册database
,并没有实际的创建,而使用 show dbs
命令也无法查看列表中新建的database
。
> use renwolecomdb switched to db renwolecomdb
认证数据库:
> db.auth("renwolecom","renwolecom")
注意:这里需要说明:你每切换一个数据库都需要进行用户认证,否则会提示你没有授权,无法写入。
要在列表中显示新建的(renwolecomdb
)数据库,至少需要插入一条文档数据,空数据库无法在列表显示。
现在在当前database
中创建collection
,并向集合中插入数据:
> db.renwolecomdb.insert({"name":"任我乐-知识分享的开发者技术博客"}) WriteResult({ "nInserted" : 1 })
查看数据库列表:
> show dbs admin 0.078GB local 0.078GB renwolecomdb 0.078GB
已经显示刚刚新建的数据库名。
获取当前数据库详细信息:
> db.stats() { "db" : "renwolecomdb", "collections" : 5, "views" : 0, "objects" : 13, "avgObjSize" : 82.46153846153847, "dataSize" : 1072, "storageSize" : 36864, "numExtents" : 5, "indexes" : 3, "indexSize" : 24528, "fileSize" : 67108864, "nsSizeMB" : 16, "extentFreeList" : { "num" : 0, "totalSize" : 0 }, "dataFileVersion" : { "major" : 4, "minor" : 22 }, "ok" : 1 }
说明:在进行任何集合操作前,都必须先切换到一个数据库。
MongoDB用户角色添加删除管理
给已存在的用户添加额外角色:
db.grantRolesToUser( "renwolecom", [ { role: "dbAdmin",db:"renwolecomdb"} ] )
删除回收指定用户角色:
db.revokeRolesFromUser( "renwolecom", [{ role: "dbAdmin",db:"renwolecomdb"}] )
查看当前数据库集合信息
获取集合信息(类似于关系型数据库的表):
> show collections renwolecomdb system.indexes
查看集合文档中数据
以下实例我们查询了集合 renwolecomdb
中的数据:
> use renwolecomdb > db.auth("renwolecom","renwolecom") 1 > db.renwolecomdb.find().pretty() { "_id" : ObjectId("59f439c17a22e643554d915c"), "name" : "任我乐-知识分享的开发者技术博客" }
删除集合
集合删除语法格式如下:
db.renwolecomdb.drop()
删除数据库
删除指定数据库:
这时需要授权 renwolecom
用户删除角色即(dbAdmin
),否则用户只有读写,并没有删除权限。
> use renwolecomdb > db.dropDatabase() { "dropped" : "renwolecomdb", "ok" : 1 }
修改MongoDB用户密码信息
方法一:
以下命令不仅可以更新密码,还可以更新用户名:
> use admin switched to db admin > db.changeUserPassword("admin", "7utVM2RAfeAnDosq0jN20tu9jWkZQyNj") > db.auth("admin","7utVM2RAfeAnDosq0jN20tu9jWkZQyNj") 1
已经修改成功,并且通过验证。
方法二(推荐):
只修改用户密码:
> use admin switched to db admin > db.changeUserPassword("admin", "7utVM2RAfeAnDosq0jN20tu9jWkZQyNj")
删除用户
将系统中所有关于 renwolecom
的用户删除:
> use admin > db.system.users.remove({user:"renwolecom"});
只删除本数据中的 renwolecom
用户
> use renwolecomdb > db.dropUser("renwolecom");
删除本数据下面所有用户
> use renwolecomdb > db.dropAllUsers()
授权登录MongoDB
通过下面的方式可以直接登陆数据库并且已获得相应权限:
$ mongo renwolecomdb -u renwolecom -p MongoDB shell version v3.4.9 Enter password:
更多命令可以输入以下命令查看:
> help
参考:
关于用户认证方法://docs.mongodb.com/manual/tutorial/enable-authentication/
关于用户管理方法://docs.mongodb.com/manual/reference/method/js-user-management/
关于角色管理方法://docs.mongodb.com/manual/reference/method/js-role-management/