一、启动mongo
/etc/init.d/mongod start
二、进入mongo命令:mongo
1、显示所有库:show dbs;
2、切换库:use admin (如果没有则创建)
3、查看表:show collections;(为空,没有表)
4、设置管理员(存放在admin库中,即admin库中创建的用户都是管理员,管理员需要通过admin认证后,才能访问管理其他数据库;普通用户(即在非admin库下创建的用户),只能对自己所在库进行相关权限操作):
db.addUser('admin','admin')
#输出:{
"user" : "admin",
"readOnly" : false,
"pwd" : "7c67ef13bbd4cae106d959320af3f704"
}
5、再次查看表:show collections;
#输出:system.indexes
system.users
6、查看管理员:db.system.users.find()
#输出:{ "_id" : ObjectId("52fa03f4a8bb860225848c52"), "user" : "admin", "readOnly" : false, "pwd" : "7c67ef13bbd4cae106d959320af3f704" }
7、设置访问权限:vim /etc/mongodb.conf
将 #auth = true前的注释去掉,
8、重启mongo:/etc/init.d/mongod restart
9、再次进行相关操作:show dbs;
输出:assert failed : listDatabases failed:{
"assertion" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"assertionCode" : 10057,
"errmsg" : "db assertion failure",
"ok" : 0
}
Tue Feb 11 19:21:51 uncaught exception: assert failed : listDatabases failed:{
"assertion" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"assertionCode" : 10057,
"errmsg" : "db assertion failure",
"ok" : 0
}
因为没有做管理员/用户认证
10、用户认证:db.auth('admin','admin')
输出:0
认证失败,原因是admin用户不在test库里,它属于admin(在admin库创建的)
11、使用admin库:use admin
13、未用户认证前,进行操作:show collections;
输出:Tue Feb 11 19:27:25 uncaught exception: error: {
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"code" : 10057
}
12、用户认证:db.auth('admin','admin')
输出:1
认证成功
13、在admin库下进行操作:show collections;
输出:system.indexes
system.users
三、利用admin管理员对其他数据库进行用户授权验证
1、切换到admin数据库中
use admin
2、使用admin管理员账号
db.auth('admin','admin')
3、切换到database_other库
use database_other
4、添加账号database_other数据库中所要授权的账号
db.addUser('user','password')
5、对该用户进行授权认证
db.auth('user','password')
之后就可以进行用该账号操作database_other库了
四、python连接客户端
import pymongo
#uri = "mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"
uri = "mongodb://%s:%s@%s:%s/%s?connectTimeoutMS=3000"
self.client = pymongo.MongoClient(uri % ('xiaoming','123456','127.0.0.1',27017,'db1'))
self.db = self.client.get_default_database()