介绍
Mongodb是一个schema free的非sql类分布式数据库,可以利用它做很多很灵活的存储和操作,最近了解了下它的账户机制,通过设置auth启动方式可以对所有登陆用户做各种操作的限定。
认证方式登陆mongodb
sudo ./bin/mongod --auth -dbpath=/usr/local/mongodb/data/db --port 27017 -logpath=/usr/local/mongodb/log --logappend
dbpath和logpath需要自己提前单独的创建好目录。
-auth: 表示通过认证方式登陆mongodb
不过在用auth方式启动mongodb服务器之前,需要创建一个可以管理所有用户的账户(一般在admin数据库中),如:
use admin
db.createUser(
{
user: "root",
pwd: "root",
roles: [{ role: "userAdminAnyDatabase", db: "admin" } ]
}
)
创建了一个“root”账户,它的role(即权限范围)是“userAdminAnyDatabase”,即可以admin权限管理任意的数据库的用户。
如果不使用“use admin”,那会在当前数据库创建user,不指定db的登陆会默认在test数据库中,createUser中的role指定了权限类型,roles中的“db”指定了作用域的数据库。
设置以auth方式登陆之后,client端通过mongo登陆mongodb,是必须加上“–authenticationDatabase”选项的,“authenticationDatabase”指定了校验用户账户名和密码的数据库,例如:
./bin/mongo mytest -u "test" -p "123" --authenticationDatabase admin
- 紧接着mongo命令后面的“mytest”指定了登陆之后所在的数据库,即成功登陆之后会直接跳转到该数据库,不写默认是test数据库。
- –authenticationDatabase 指定的是验证用户名和密码的数据库,也就是说在哪个数据库创建的登陆用户,就写哪个数据库,如上例中,user=“test”和passwd=“123”是在admin db中创建的。
- 如果目的既是登陆test数据库,而用户也是test数据库中创建,那么可以不用写后面的参数 –authenticationDatabase,如下也可以登陆:
./bin/mongo mytest -u "test" -p "123"
mongodb关闭
不要kill -9 pid 方式关闭mongodb的进程,这样会有很多服务资源没法回收,应该使用
kill -2 pid
或者
db.shutdownServer()