创建认证用户
取消认证:
如不取消认证则无法创建用户,新安装的 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/