在这里使用了mongodb
自带的命令行工具去操作数据库。
连接数据库
首先开启服务,v4.0
版本无需手动开启
$ mongod --dbpath C:\mongodb
客户端接入
$ mongo #默认是127.0.0.1:27017
或者指定地址
$ mongo 127.0.0.1:27017
创建管理员
默认情况下,只要开放了binip
,任何计算机都能操作到mongodb
,很明显这是很危险的。
管理员类型
mongodb
提供了很多了角色,用于不同情境下对数据库进行管理:
- 数据库用户角色:
read
、readWrite
; - 数据库管理角色:
dbAdmin
、dbOwner
、userAdmin
; - 集群管理角色:
clusterAdmin
、clusterManager
、clusterMonitor
、hostManager
; - 备份恢复角色:
backup
、restore
; - 所有数据库角色:
readAnyDatabase
、readWriteAnyDatabase
、userAdminAnyDatabase
、
dbAdminAnyDatabase
- 超级用户角色:
root
需要我们关注的是dbOwner
(某个数据库的所有者)和root
(所有权限)
创建超级管理员
mongodb
自带了admin
数据库,这里是所有管理员的集合
默认mongodb
不开启认证登录,在开启之前,我们必须要创建一个超级管理员,用于管理其他账户
创建
$ use admin
# 创建一个admin超级用户,管理以后所有的用户
# 开启验证登录之后,只有该账户能看到admin数据库
$ db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
开启认证登录
修改mongodb
安装目录下bin
目录里面的mongod.cfg
security:
authorization: enabled
重启服务
以windows
系统为例,cmd
输入 services.msc
--> MongoDB Server
重启
验证连接
开启验证登录后,直接使用mongo
虽然可以连接成功,但是show dbs
无法看到数据库
使用刚才的超级管理员连接入admin
数据库
$ mongo 127.0.0.1:27017/admin -u admin -p 123456
创建对应数据库的管理员
比如我希望让一个管理员只能管理koa
数据库
# 利用超级管理员登录到admin数据库之后
# 创建一个专属于koa数据库的管理员
db.createUser({user:"koa",pwd:"123456",roles:[{role: "dbOwner", db: "koa" }]})
然后使用该账号密码登录,就只能操作koa
数据库了。下面是2种登录方法:
- 验证登录
$ mongo 127.0.0.1:27017/admin -u koa -p 123456
auth
登录$ mongo 127.0.0.1:27017/admin $ db.auth("koa","123456")
用户相关操作
查看当前用户
$ use admin
$ show users
删除用户
$ db.dropUser('username')
更新用户
$ db.updateUser('admin',{pwd:'password'})
密码验证
$ db.auth('username','pwd')