一.安装带安全验证机制的mongodb服务:
在mongodb的安装路径的bin目录下,执行mongod命令使mongodb作为系统的一个服务:指令参考如下:
D:\mongodb\bin>mongod --dbpath D:\data\db --logpath D:\data\Mongodb.log –logappend –serviceName MongoDB --auth --install
这时,系统会多一个名为MongoDB的服务,可以在开始——运行下输入Services.msc 可以查看。指令中的—auth 命令就是为mongodb加上安全验证。--dbpath命令指定数据存放的目录,--logpath命令指定日志文件。如果原本已经存在MongDB服务,可以用以下指令先删除该服务再用以上指令添加Mongodb服务:(该指令对数据库的数据不会产生影响) sc delete mongoDB
二.如果mongodb服务已加入安全验证机制,做如下测试:
1.为管理者账号添加用户名和密码:
D:\mongodb\bin> mongo
MongoDB shell version: 2.4.5
connecting to: test
>use admin #使用管理员账号
switched to db admin
> db.addUser('name','password') #加入用户名和密码的指令
{
"user" : "name",
"readOnly" : false,
"pwd" : "e7fa8c32338a5d2b2359898095ede6f7",
"_id" : ObjectId("52c0e91e5c69479a4bf19922")
}
>ctrl + c 退出
2.管理者账号验证:
D:\mongodb\bin> mongo
MongoDB shell version: 2.4.5
connecting to: test
>show dbs #没有输入用户名密码,会出现以下出错误:
Mon Dec 30 11:41:39.656 JavaScript execution failed: listDatabases failed:{ "ok"
: 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:L46
> use admin #使用管理者账号
switched to db admin
>show dbs #即使在管理者账号下,没有输入用户名密码,也会出现以下出错误:Mon Dec 30 11:41:39.656 JavaScript execution failed: listDatabases failed:{ "ok": 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:L46
> db.auth('nnn','mmm') #如果输入的用户名密码不正确,会出现如下错误
Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }
> db.auth('name','password') #当验证成功会输出1
1
> show dbs #这时就可以对数据库进行操作
admin 0.0625GB
local 0.03125GB
mymongo 0.0625GB
test (empty)
3.为普通账号创建用户名密码:
在加入安全验证后,必须要为管理者admin账号加入用户名和密码,而其他普通账号可以加入用户名密码,也可以不加入。
D:\mongodb\bin> mongo
MongoDB shell version: 2.4.5
connecting to: test
> use admin
switched to db admin
> db.auth('name','password') #先要验证管理者账号
1
> use mymongo #选择普通账号
switched to db mymongo
> db.mymongo.find() #普通账号没有加入用户名密码前可以操作
{ "_id" : ObjectId("52b7b54277e027dceef452e7"), "name" : "lzf" }
> db.addUser('name1','password1') #为普通账号加入用户名密码
{
"user" : "name1",
"readOnly" : false, es
"pwd" : "ba42b4992a16552be7af868d232ad22e",
"_id" : ObjectId("52c0fc9fce02de7cae298260")
}
>ctrl + c 退出
4.普通账号验证:
D:\mongodb\bin> mongo
MongoDB shell version: 2.4.5
connecting to: test
> use mymongo
Switched to db
mymongo > db.mymongo.find() #没有验证,不能对mymongo进行操作
error: { "$err" : "not authorized for query on mymongo.mymongo", "code" : 16550
}
> db.auth('name1','password1') #验证
1
> db.mymongo.find() #验证通过后,可以操作,但只可以对该账号操作
{ "_id" : ObjectId("52b7b54277e027dceef452e7"), "name" : "lzf" }
> show dbs #会出错,要管理者账号验证才能执行该指令
Mon Dec 30 13:02:54.640 JavaScript execution failed: listDatabases failed:{ "ok"
: 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:L46
三.取消安全验证的做法:
删除MongoDB服务(不会对数据库的数据产生影响):
sc delete MongoDB
重新安装一个服务,这时不要加入–auth参数:
D:\mongodb\bin>mongod --dbpath D:\data\db --logpath D:\data\Mongodb.log –logappend –serviceName MongoDB --install
重启mongodb数据库,此时已经不需要安全验证了
四.在python的pymongo模块中的相关指令:
添加用户名密码:
db.add_user(‘name’,’;password’)
验证用户名密码:
db.authenticate(‘name’,’password’)